home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright 1991, 1992, 1993, 1994, Silicon Graphics, Inc.
- * All Rights Reserved.
- *
- * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
- * the contents of this file may not be disclosed to third parties, copied or
- * duplicated in any form, in whole or in part, without the prior written
- * permission of Silicon Graphics, Inc.
- *
- * RESTRICTED RIGHTS LEGEND:
- * Use, duplication or disclosure by the Government is subject to restrictions
- * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
- * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
- * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
- * rights reserved under the Copyright Laws of the United States.
- */
-
- /*
- * Kurt Akeley
- * 26 January 1988
- *
- * Simple GL interpreter
- */
-
- #include <stdio.h>
- #include <awk.h>
- #include <gl/gl.h>
- #include "interp.h"
-
- #define INFINITY (1000000000)
- #define MAXVCOUNT 100
-
- static float xmin = INFINITY;
- static float xmax = -INFINITY;
- static float ymin = INFINITY;
- static float ymax = -INFINITY;
- static float zmin = INFINITY;
- static float zmax = -INFINITY;
- static long vcount = 0;
- static int breakok = TRUE; /* mode during list generation */
-
- static void (*breakfunction)() = 0; /* call back at MAXVCOUNT intervals */
-
- AwkArray* CommandNumber;
- AwkArray* Constant;
- AwkArray* ImagePointer;
- AwkArray* FilePointers;
-
- /*
- * Variables and functions to support groups of vertexes
- *
- * Note - some of the code here is rather complex (especially the
- * support for hollow polygons). It can generally be ignored.
- */
-
- static void (*bgnfunc)();
- static void (*endfunc)();
- static void (*compfunc)();
- static void (*compfunc2)();
- static int grptype;
-
- static void interp_bgngroup(int* data) {
- (*bgnfunc)(data);
- }
-
- static void interp_endgroup(void) {
- (*endfunc)();
- }
-
-
- static element_t *hollow_savejump;
- static element_t **hollow_savepointer;
- static long hollowcolor = 0xffffff;
- static long hollowwidth = 2;
-
- #define ZMASK 0x800000
- #define ZVAL_ENABLE 0
- #define ZVAL_DISABLE 0x800000
-
- static void bgnhollowpoly(data) int *data; {
- register element_t* sp;
-
- /* set sp to pointer to next element */
- sp = (element_t*) *(data-1);
-
- /* save pointer to next element */
- hollow_savejump = sp;
- hollow_savepointer = (element_t**)(data-1);
-
- /*
- * First disable all the pixels in the polygon. Do this by changing
- * a single bit in the Z-buffer.
- */
-
- zbuffer(FALSE);
- backbuffer(FALSE);
- zdraw(TRUE);
- wmpack(ZMASK);
- cpack(ZVAL_DISABLE);
- compfunc = interp_endgroup;
- compfunc2 = v3f;
- bgnpolygon();
- for (sp=hollow_savejump; (sp->func) != compfunc; sp = sp->next) {
- if ((sp->func) == compfunc2)
- sp->func((float*)sp+NONDATASIZE);
- }
- endpolygon();
-
- /*
- * Now enable only the pixels on the outline of the polygon
- * for filling. Do this by changing a single Z-buffer bit back.
- */
-
- cpack(ZVAL_ENABLE);
- linewidth(hollowwidth);
- bgnclosedline();
- for (sp=hollow_savejump; (sp->func) != compfunc; sp = sp->next) {
- if ((sp->func) == compfunc2)
- sp->func((float*)sp+NONDATASIZE);
- }
- endclosedline();
- linewidth(1);
-
- /*
- * Now fill the polygon using its color commands
- */
-
- zbuffer(TRUE);
- backbuffer(TRUE);
- zdraw(FALSE);
- wmpack(0xffffff);
- cpack(hollowcolor);
- bgnpolygon();
- for (sp=hollow_savejump; (sp->func) != compfunc; sp = sp->next) {
- sp->func((float*)sp+NONDATASIZE);
- }
- endpolygon();
-
- /*
- * Now enable all the pixels in the polygon
- */
-
- zbuffer(FALSE);
- backbuffer(FALSE);
- zdraw(TRUE);
- wmpack(ZMASK);
- cpack(ZVAL_ENABLE);
- bgnpolygon();
- for (sp=hollow_savejump; (sp->func) != compfunc; sp = sp->next) {
- if ((sp->func) == compfunc2)
- sp->func((float*)sp+NONDATASIZE);
- }
- endpolygon();
-
- /*
- * Now cleanup the mess we've made of the machine state
- */
-
- zbuffer(TRUE);
- backbuffer(TRUE);
- zdraw(FALSE);
- wmpack(0xffffffff);
-
- /* change next pointer to point to endgroup command */
- *hollow_savepointer = sp;
- }
-
- static void endhollowpoly(void) {
- /* normal traversal has now jumped here - fix up bgngroup pointer */
- *hollow_savepointer = hollow_savejump;
- }
-
- int getgrouptype(void) {
- return grptype;
- }
-
- void grouptype(int type) {
- grptype = type;
- switch (type) {
- case GRP_POINT:
- bgnfunc = bgnpoint;
- endfunc = endpoint;
- break;
- case GRP_LINE:
- bgnfunc = bgnline;
- endfunc = endline;
- break;
- case GRP_CLOSEDLINE:
- bgnfunc = bgnclosedline;
- endfunc = endclosedline;
- break;
- case GRP_POLYGON:
- bgnfunc = bgnpolygon;
- endfunc = endpolygon;
- break;
- case GRP_TMESH:
- bgnfunc = bgntmesh;
- endfunc = endtmesh;
- break;
- case GRP_HOLLOWPOLY:
- bgnfunc = bgnhollowpoly;
- endfunc = endhollowpoly;
- break;
- }
- }
-
- static void interp_grouptype(int* data) {
- grouptype(data[0]);
- }
-
- static void interp_hollowcolor(int* data) {
- hollowcolor = data[0];
- }
-
- static void interp_hollowwidth(int* data) {
- hollowwidth = data[0];
- }
-
- /*
- * Wrapper functions for GL commands that do not take a single
- * pointer to data.
- */
-
- static void interp_acbuf(float* data) {
- acbuf((long)data[0],data[1]);
- }
-
- static void interp_acsize(int* data) {
- acsize(data[0]);
- }
-
- static void interp_afunction(int* data) {
- afunction(data[0],data[1]);
- }
-
- static void interp_arc(float* data) {
- arc(data[0],data[1],(int)data[2],(int)data[3],(int)data[4]);
- }
-
- static void interp_arcf(float* data) {
- arcf(data[0],data[1],(int)data[2],(int)data[3],(int)data[4]);
- }
-
- static void interp_backbuffer(int* data) {
- backbuffer(data[0]);
- }
-
- static void interp_backface(int* data) {
- backface(data[0]);
- }
-
- static void interp_blendfunction(int* data) {
- blendfunction(data[0],data[1]);
- }
-
- static void interp_blink(int* data) {
- blink(data[0],data[1],data[2],data[3],data[4]);
- }
-
- #define IND(d,i) &(d[(i)*4])
-
- static void interp_box(float* data) {
- static float n[24] = {
- 1, 0, 0, 0,
- -1, 0, 0, 0,
- 0, 1, 0, 0,
- 0,-1, 0, 0,
- 0, 0, 1, 0,
- 0, 0,-1, 0,
- };
- bgnpolygon();
- n3f(IND(n,5));
- v3f(IND(data,0));
- v3f(IND(data,2));
- v3f(IND(data,3));
- v3f(IND(data,1));
- endpolygon();
- bgnpolygon();
- n3f(IND(n,0));
- v3f(IND(data,1));
- v3f(IND(data,3));
- v3f(IND(data,7));
- v3f(IND(data,5));
- endpolygon();
- bgnpolygon();
- n3f(IND(n,4));
- v3f(IND(data,5));
- v3f(IND(data,7));
- v3f(IND(data,6));
- v3f(IND(data,4));
- endpolygon();
- bgnpolygon();
- n3f(IND(n,1));
- v3f(IND(data,4));
- v3f(IND(data,6));
- v3f(IND(data,2));
- v3f(IND(data,0));
- endpolygon();
- bgnpolygon();
- n3f(IND(n,2));
- v3f(IND(data,6));
- v3f(IND(data,7));
- v3f(IND(data,3));
- v3f(IND(data,2));
- endpolygon();
- bgnpolygon();
- n3f(IND(n,3));
- v3f(IND(data,0));
- v3f(IND(data,1));
- v3f(IND(data,5));
- v3f(IND(data,4));
- endpolygon();
- }
-
- static void interp_breakcheck() {
- if (breakfunction)
- (*breakfunction)();
- }
-
- static void interp_callobj(int* data) {
- register char* s;
- register int i;
- if (data[0])
- drawinterpobj((element_t*)data[0]);
- else {
- s = (char*) &data[1];
- if (i = (int)awkGetPointer(FilePointers,s)) {
- data[0] = i;
- drawinterpobj((element_t*)data[0]);
- return;
- }
- fprintf(stderr,"reading sub-object <%s> ... ",s);
- if (i = (int)getinterpobj(s)) {
- fprintf(stderr,"done\n");
- data[0] = i;
- drawinterpobj((element_t*)data[0]);
- return;
- }
- else {
- fprintf(stderr,"failed. abort.\n",s);
- exit(1);
- }
- }
- }
-
- static void interp_charstr(char* data) {
- charstr(data);
- }
-
- static void interp_circ(float* data) {
- circ(data[0],data[1],(int)data[2]);
- }
-
- static void interp_circf(float* data) {
- circf(data[0],data[1],(int)data[2]);
- }
-
- static void interp_clipplane(float* data) {
- clipplane((long)data[0],(long)data[1],&data[2]);
- }
-
- static void interp_cmov(float* data) {
- cmov(data[0],data[1],data[2]);
- }
-
- static void interp_color(int* data) {
- color(data[0]);
- }
-
- static void interp_colorf(float* data) {
- colorf(data[0]);
- }
-
- static void interp_cpack(int* data) {
- cpack(data[0]);
- }
-
- static void interp_concave(int* data) {
- concave(data[0]);
- }
-
- static void interp_czclear(int* data) {
- czclear(data[0],data[1]);
- }
-
- static void interp_deflinestyle(int* data) {
- deflinestyle(data[0],data[1]);
- }
-
- static void interp_defpattern(unsigned int* data) {
- unsigned short mask[64];
- int size;
- int i;
- i = data[1];
- size = i * (i>>4);
- for (i=0; i<size; i++)
- mask[i] = data[i+2];
- defpattern(data[0],data[1],mask);
- }
-
- static void interp_displacepolygon(float* data) {
- #ifdef GD_TEXTURE_3D
- displacepolygon(data[0]);
- #endif
- }
-
- static void interp_depthcue(int* data) {
- depthcue(data[0]);
- }
-
- static void interp_draw(float* data) {
- draw(data[0],data[1],data[2]);
- }
-
- static void interp_drawmode(int* data) {
- drawmode(data[0]);
- }
-
- static void interp_fogvertex(float* data) {
- fogvertex((long)data[0],&data[1]);
- }
-
- static void interp_frontbuffer(int* data) {
- frontbuffer(data[0]);
- }
-
- static void interp_frontface(int* data) {
- frontface(data[0]);
- }
-
- static void interp_glcompat(int* data) {
- glcompat(data[0],data[1]);
- }
-
- static void interp_linesmooth(int* data) {
- linesmooth(data[0]);
- }
-
- static void interp_linewidth(int* data) {
- linewidth(data[0]);
- }
-
- static void interp_lmbind(int* data) {
- lmbind(data[0],data[1]);
- }
-
- static void interp_lmcolor(int* data) {
- lmcolor(data[0]);
- }
-
- static void interp_lmdef(float* data) {
- int target,index,size;
- target = (int)data[0];
- index = (int)data[1];
- size = (int)data[2];
- lmdef(target,index,size,data+3);
- }
-
- static void interp_logicop(int* data) {
- logicop(data[0]);
- }
-
- static void interp_lookat(float* data) {
- int twist;
- twist = (int)data[6];
- lookat(data[0],data[1],data[2],data[3],data[4],data[5],twist);
- }
-
- static void interp_lrectwrite(int* data) {
- lrectwrite(data[0],data[1],data[2],data[3],(unsigned long*)data[4]);
- }
-
- static void interp_lrgbrange(int* data) {
- lRGBrange(data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7]);
- }
-
- static void interp_lsetdepth(int* data) {
- lsetdepth(data[0],data[1]);
- }
-
- static void interp_lshaderange(int* data) {
- lshaderange(data[0],data[1],data[2],data[3]);
- }
-
- static void interp_lsrepeat(int* data) {
- lsrepeat(data[0]);
- }
-
- static void interp_mapcolor(int* data) {
- mapcolor(data[0],data[1],data[2],data[3]);
- }
-
- static void interp_mmode(int* data) {
- mmode(data[0]);
- }
-
- static void interp_move(float* data) {
- move(data[0],data[1],data[2]);
- }
-
- static void interp_mswapbuffers(int* data) {
- mswapbuffers(data[0]);
- }
-
- static void interp_nmode(int* data) {
- nmode(data[0]);
- }
-
- static void interp_ortho(float* data) {
- ortho(data[0],data[1],data[2],data[3],data[4],data[5]);
- }
-
- static void interp_ortho2(float* data) {
- ortho2(data[0],data[1],data[2],data[3]);
- }
-
- static void interp_overlay(int* data) {
- overlay(data[0]);
- }
-
- static void interp_pdr(float* data) {
- pdr(data[0],data[1],data[2]);
- }
-
- static void interp_perspective(float* data) {
- int fovy;
- fovy = (int)data[0];
- perspective(fovy,data[1],data[2],data[3]);
- }
-
- static void interp_pixmode(int* data) {
- pixmode(data[0],data[1]);
- }
-
- static void interp_pmv(float* data) {
- pmv(data[0],data[1],data[2]);
- }
-
- static void interp_pnt(float* data) {
- pnt(data[0],data[1],data[2]);
- }
-
- static void interp_pntsize(float* data) {
- pntsize(data[0]);
- }
-
- static void interp_pntsmooth(int* data) {
- pntsmooth(data[0]);
- }
-
- static void interp_polarview(float* data) {
- int azim,inc,twist;
- azim = (int)data[1];
- inc = (int)data[2];
- twist = (int)data[3];
- polarview(data[0],azim,inc,twist);
- }
-
- #define MAXPOLY 100
-
- static void interp_polf(float* data) {
- #ifdef NOTDEF
- Coord polfdata[MAXPOLY][3];
- long n;
- int i;
- n = data[0];
- if (n >= MAXPOLY)
- n = MAXPOLY;
- for (i=0; i < n; i++) {
- polfdata[i][0] = data[3*i+1];
- polfdata[i][1] = data[3*i+2];
- polfdata[i][2] = data[3*i+3];
- }
- polf(n, polfdata);
- #else
- fprintf(stderr, "polf is broken, the #$*& compiler won't deal with it!\n");
- #endif
- }
-
- static void interp_poly(float* data) {
- #ifdef NOTDEF
- Coord polydata[MAXPOLY][3];
- long n;
- int i;
- n = data[0];
- if (n >= MAXPOLY)
- n = MAXPOLY;
- for (i=0; i < n; i++) {
- polydata[i][0] = data[3*i+1];
- polydata[i][1] = data[3*i+2];
- polydata[i][2] = data[3*i+3];
- }
- poly(n, polydata);
- #else
- fprintf(stderr, "poly is broken, the #$*& compiler won't deal with it!\n");
- #endif
- }
-
- static void interp_polyimage(int* data) {
- register long x;
- long y;
- long* image;
- register long* bottom;
- register long* top;
- long bvertex[2],tvertex[2];
-
- image = (long*)data[2];
- for (y=0; y<data[1]; y++) {
- bottom = image + y*data[1];
- top = image + (y+1)*data[1];
- bvertex[1] = y;
- tvertex[1] = y+1;
- bgntmesh();
- for (x=0; x<=data[0]; x++) {
- cpack(bottom[x]);
- bvertex[0] = x;
- v2i(bvertex);
- cpack(top[x]);
- tvertex[0] = x;
- v2i(tvertex);
- }
- endtmesh();
- }
- }
-
- static void interp_polymode(int* data) {
- polymode(data[0]);
- }
-
- static void interp_polysmooth(int* data) {
- polysmooth(data[0]);
- }
-
- static void interp_readsource(int* data) {
- readsource(data[0]);
- }
-
- static void interp_rect(float* data) {
- rect(data[0],data[1],data[2],data[3]);
- }
-
- static void interp_rectcopy(int* data) {
- rectcopy(data[0],data[1],data[2],data[3],data[4],data[5]);
- }
-
- static void interp_rectf(float* data) {
- rectf(data[0],data[1],data[2],data[3]);
- }
-
- static void interp_rectzoom(float* data) {
- rectzoom(data[0],data[1]);
- }
-
- static void interp_RGBcolor(int* data) {
- RGBcolor(data[0],data[1],data[2]);
- }
-
- static void interp_RGBwritemask(int* data) {
- RGBwritemask(data[0],data[1],data[2]);
- }
-
- static void interp_rot(float* data) {
- int axis;
- axis = (int)data[1];
- rot(data[0],axis);
- }
-
- static void interp_rotate(int* data) {
- rotate(data[0],data[1]);
- }
-
- static void interp_sbox(float* data) {
- sbox(data[0],data[1],data[2],data[3]);
- }
-
- static void interp_sboxf(float* data) {
- sboxf(data[0],data[1],data[2],data[3]);
- }
-
- static void interp_scale(float* data) {
- scale(data[0],data[1],data[2]);
- }
-
- static void interp_sclear(int* data) {
- sclear(data[0]);
- }
-
- static void interp_scrbox(int* data) {
- scrbox(data[0]);
- }
-
- static void interp_scrmask(int* data) {
- scrmask(data[0],data[1],data[2],data[3]);
- }
-
- static void interp_scrsubdivide(float* data) {
- scrsubdivide((long)data[0],&data[1]);
- }
-
- static void interp_setlinestyle(int* data) {
- setlinestyle(data[0]);
- }
-
- static void interp_setpattern(int* data) {
- setpattern(data[0]);
- }
-
- static void interp_shademodel(int* data) {
- shademodel(data[0]);
- }
-
- static void interp_shaderange(int* data) {
- shaderange(data[0],data[1],data[2],data[3]);
- }
-
- static void interp_stencil(int* data) {
- stencil(data[0],data[1],data[2],data[3],data[4],data[5],data[6]);
- }
-
- static void interp_stensize(int* data) {
- stensize(data[0]);
- }
-
- static void interp_subpixel(int* data) {
- subpixel(data[0]);
- }
-
- static void interp_swritemask(int* data) {
- swritemask(data[0]);
- }
-
- static void interp_tevbind(int* data) {
- tevbind(data[0],data[1]);
- }
-
- static void interp_tevdef(float* data) {
- tevdef((long)data[0],(long)data[1],&data[2]);
- }
-
- static void interp_texbind(int* data) {
- texbind(data[0],data[1]);
- }
-
- static void interp_texdef2d(float* data) {
- texdef2d((long)data[0],(long)data[1],(long)data[2],(long)data[3],
- (unsigned long **)(&data[4]),(long)data[5],&data[6]);
- }
-
- static void interp_texgen(float* data) {
- texgen((long)data[0],(long)data[1],&data[2]);
- }
-
- static void interp_translate(float* data) {
- translate(data[0],data[1],data[2]);
- }
-
- static void interp_underlay(int* data) {
- underlay(data[0]);
- }
-
- static void interp_viewport(int* data) {
- viewport(data[0],data[1],data[2],data[3]);
- }
-
- static void interp_wmpack(int* data) {
- wmpack(data[0]);
- }
-
- static void interp_window(float* data) {
- window(data[0],data[1],data[2],data[3],data[4],data[5]);
- }
-
- static void interp_writemask(int* data) {
- writemask(data[0]);
- }
-
- static void interp_zbuffer(int* data) {
- zbuffer(data[0]);
- }
-
- static void interp_zdraw(int* data) {
- zdraw(data[0]);
- }
-
- static void interp_zfunction(int* data) {
- zfunction(data[0]);
- }
-
- static void interp_zsource(int* data) {
- zsource(data[0]);
- }
-
- static void interp_zwritemask(int* data) {
- zwritemask(data[0]);
- }
-
- /*
- * Initialize the interp system
- */
-
- void interpinit(int argc, char** argv) {
- awkInit(argc,argv);
-
- grouptype(GRP_POLYGON);
- CommandNumber = awkNewArray("CommandNumber",AWK_INT);
- Constant = awkNewArray("Constant",AWK_INT);
- ImagePointer = awkNewArray("ImagePointer",AWK_POINTER);
- FilePointers = awkNewArray("FilePointers",AWK_POINTER);
-
- awkAddInt(CommandNumber,"acbuf",ACBUF);
- awkAddInt(CommandNumber,"acsize",ACSIZE);
- awkAddInt(CommandNumber,"addtopup",ADDTOPUP);
- awkAddInt(CommandNumber,"afunction",AFUNCTION);
- awkAddInt(CommandNumber,"arc",ARC);
- awkAddInt(CommandNumber,"arcf",ARCF);
- awkAddInt(CommandNumber,"arcfi",ARCFI);
- awkAddInt(CommandNumber,"arcfs",ARCFS);
- awkAddInt(CommandNumber,"arci",ARCI);
- awkAddInt(CommandNumber,"arcs",ARCS);
- awkAddInt(CommandNumber,"attachcursor",ATTACHCURSOR);
- awkAddInt(CommandNumber,"backbuffer",BACKBUFFER);
- awkAddInt(CommandNumber,"backface",BACKFACE);
- awkAddInt(CommandNumber,"box",BOX);
- awkAddInt(CommandNumber,"bboxR",BBOX2);
- awkAddInt(CommandNumber,"bboxRi",BBOX2I);
- awkAddInt(CommandNumber,"bboxRs",BBOX2S);
- awkAddInt(CommandNumber,"bgnclosedline",BGNCLOSEDLINE);
- awkAddInt(CommandNumber,"bgnline",BGNLINE);
- awkAddInt(CommandNumber,"bgnpoint",BGNPOINT);
- awkAddInt(CommandNumber,"bgnpolygon",BGNPOLYGON);
- awkAddInt(CommandNumber,"bgnqstrip",BGNQSTRIP);
- awkAddInt(CommandNumber,"bgntmesh",BGNTMESH);
- awkAddInt(CommandNumber,"blankscreen",BLANKSCREEN);
- awkAddInt(CommandNumber,"blanktime",BLANKTIME);
- awkAddInt(CommandNumber,"blendfunction",BLENDFUNCTION);
- awkAddInt(CommandNumber,"blink",BLINK);
- awkAddInt(CommandNumber,"c3f",C3F);
- awkAddInt(CommandNumber,"c3i",C3I);
- awkAddInt(CommandNumber,"c3s",C3S);
- awkAddInt(CommandNumber,"c4f",C4F);
- awkAddInt(CommandNumber,"c4i",C4I);
- awkAddInt(CommandNumber,"c4s",C4S);
- awkAddInt(CommandNumber,"callobj",CALLOBJ);
- awkAddInt(CommandNumber,"charstr",CHARSTR);
- awkAddInt(CommandNumber,"chunksize",CHUNKSIZE);
- awkAddInt(CommandNumber,"circ",CIRC);
- awkAddInt(CommandNumber,"circf",CIRCF);
- awkAddInt(CommandNumber,"circfi",CIRCFI);
- awkAddInt(CommandNumber,"circfs",CIRCFS);
- awkAddInt(CommandNumber,"circi",CIRCI);
- awkAddInt(CommandNumber,"circs",CIRCS);
- awkAddInt(CommandNumber,"clear",CLEAR);
- awkAddInt(CommandNumber,"clearhitcode",CLEARHITCODE);
- awkAddInt(CommandNumber,"clipplane",CLIPPLANE);
- awkAddInt(CommandNumber,"clkoff",CLKOFF);
- awkAddInt(CommandNumber,"clkon",CLKON);
- awkAddInt(CommandNumber,"closeobj",CLOSEOBJ);
- awkAddInt(CommandNumber,"cmode",CMODE);
- awkAddInt(CommandNumber,"cmov",CMOV);
- awkAddInt(CommandNumber,"cmov2",CMOV2);
- awkAddInt(CommandNumber,"cmov2i",CMOV2I);
- awkAddInt(CommandNumber,"cmov2s",CMOV2S);
- awkAddInt(CommandNumber,"cmovi",CMOVI);
- awkAddInt(CommandNumber,"cmovs",CMOVS);
- awkAddInt(CommandNumber,"color",COLOR);
- awkAddInt(CommandNumber,"colorf",COLORF);
- awkAddInt(CommandNumber,"compactify",COMPACTIFY);
- awkAddInt(CommandNumber,"concave",CONCAVE);
- awkAddInt(CommandNumber,"cpack",CPACK);
- awkAddInt(CommandNumber,"crv",CRV);
- awkAddInt(CommandNumber,"crvn",CRVN);
- awkAddInt(CommandNumber,"curorigin",CURORIGIN);
- awkAddInt(CommandNumber,"cursoff",CURSOFF);
- awkAddInt(CommandNumber,"curson",CURSON);
- awkAddInt(CommandNumber,"curstype",CURSTYPE);
- awkAddInt(CommandNumber,"curvebasis",CURVEBASIS);
- awkAddInt(CommandNumber,"curveit",CURVEIT);
- awkAddInt(CommandNumber,"curveprecision",CURVEPRECISION);
- awkAddInt(CommandNumber,"cyclemap",CYCLEMAP);
- awkAddInt(CommandNumber,"czclear",CZCLEAR);
- awkAddInt(CommandNumber,"dbtext",DBTEXT);
- awkAddInt(CommandNumber,"defbasis",DEFBASIS);
- awkAddInt(CommandNumber,"defcursor",DEFCURSOR);
- awkAddInt(CommandNumber,"deflinestyle",DEFLINESTYLE);
- awkAddInt(CommandNumber,"defpattern",DEFPATTERN);
- awkAddInt(CommandNumber,"defrasterfont",DEFRASTERFONT);
- awkAddInt(CommandNumber,"delobj",DELOBJ);
- awkAddInt(CommandNumber,"deltag",DELTAG);
- awkAddInt(CommandNumber,"depthcue",DEPTHCUE);
- awkAddInt(CommandNumber,"devport",DEVPORT);
- awkAddInt(CommandNumber,"displacepolygon",DISPLACEPOLYGON);
- awkAddInt(CommandNumber,"doublebuffer",DOUBLEBUFFER);
- awkAddInt(CommandNumber,"draw",DRAW);
- awkAddInt(CommandNumber,"drawR",DRAW2);
- awkAddInt(CommandNumber,"drawRi",DRAW2I);
- awkAddInt(CommandNumber,"drawRs",DRAW2S);
- awkAddInt(CommandNumber,"drawi",DRAWI);
- awkAddInt(CommandNumber,"drawmode",DRAWMODE);
- awkAddInt(CommandNumber,"draws",DRAWS);
- awkAddInt(CommandNumber,"editobj",EDITOBJ);
- awkAddInt(CommandNumber,"endclosedline",ENDCLOSEDLINE);
- awkAddInt(CommandNumber,"endfullscrn",ENDFULLSCRN);
- awkAddInt(CommandNumber,"endline",ENDLINE);
- awkAddInt(CommandNumber,"endpoint",ENDPOINT);
- awkAddInt(CommandNumber,"endpolygon",ENDPOLYGON);
- awkAddInt(CommandNumber,"endqstrip",ENDQSTRIP);
- awkAddInt(CommandNumber,"endtmesh",ENDTMESH);
- awkAddInt(CommandNumber,"feedback",FEEDBACK);
- awkAddInt(CommandNumber,"finish",FINISH);
- awkAddInt(CommandNumber,"fogvertex",FOGVERTEX);
- awkAddInt(CommandNumber,"font",FONT);
- awkAddInt(CommandNumber,"foreground",FOREGROUND);
- awkAddInt(CommandNumber,"freepup",FREEPUP);
- awkAddInt(CommandNumber,"frontbuffer",FRONTBUFFER);
- awkAddInt(CommandNumber,"frontface",FRONTFACE);
- awkAddInt(CommandNumber,"fudge",FUDGE);
- awkAddInt(CommandNumber,"fullscrn",FULLSCRN);
- awkAddInt(CommandNumber,"gammaramp",GAMMARAMP);
- awkAddInt(CommandNumber,"gbegin",GBEGIN);
- awkAddInt(CommandNumber,"gconfig",GCONFIG);
- awkAddInt(CommandNumber,"gewrite",GEWRITE);
- awkAddInt(CommandNumber,"gexit",GEXIT);
- awkAddInt(CommandNumber,"gflush",GFLUSH);
- awkAddInt(CommandNumber,"ginit",GINIT);
- awkAddInt(CommandNumber,"glcompat",GLCOMPAT);
- awkAddInt(CommandNumber,"greset",GRESET);
- awkAddInt(CommandNumber,"gselect",GSELECT);
- awkAddInt(CommandNumber,"gsync",GSYNC);
- awkAddInt(CommandNumber,"hollowcolor",HOLLOWCOLOR);
- awkAddInt(CommandNumber,"hollowwidth",HOLLOWWIDTH);
- awkAddInt(CommandNumber,"imakebackground",IMAKEBACKGROUND);
- awkAddInt(CommandNumber,"initnames",INITNAMES);
- awkAddInt(CommandNumber,"keepaspect",KEEPASPECT);
- awkAddInt(CommandNumber,"lampoff",LAMPOFF);
- awkAddInt(CommandNumber,"lampon",LAMPON);
- awkAddInt(CommandNumber,"linesmooth",LINESMOOTH);
- awkAddInt(CommandNumber,"linewidth",LINEWIDTH);
- awkAddInt(CommandNumber,"lmbind",LMBIND);
- awkAddInt(CommandNumber,"lmcolor",LMCOLOR);
- awkAddInt(CommandNumber,"lmdef",LMDEF);
- awkAddInt(CommandNumber,"loadmatrix",LOADMATRIX);
- awkAddInt(CommandNumber,"loadname",LOADNAME);
- awkAddInt(CommandNumber,"logicop",LOGICOP);
- awkAddInt(CommandNumber,"lookat",LOOKAT);
- awkAddInt(CommandNumber,"lrectwrite",LRECTWRITE);
- awkAddInt(CommandNumber,"lRGBrange",LRGBRANGE);
- awkAddInt(CommandNumber,"lsbackup",LSBACKUP);
- awkAddInt(CommandNumber,"lsetdepth",LSETDEPTH);
- awkAddInt(CommandNumber,"lshaderange",LSHADERANGE);
- awkAddInt(CommandNumber,"lsrepeat",LSREPEAT);
- awkAddInt(CommandNumber,"makeobj",MAKEOBJ);
- awkAddInt(CommandNumber,"maketag",MAKETAG);
- awkAddInt(CommandNumber,"mapcolor",MAPCOLOR);
- awkAddInt(CommandNumber,"mapw",MAPW);
- awkAddInt(CommandNumber,"mapw2",MAPW2);
- awkAddInt(CommandNumber,"maxsize",MAXSIZE);
- awkAddInt(CommandNumber,"minsize",MINSIZE);
- awkAddInt(CommandNumber,"mmode",MMODE);
- awkAddInt(CommandNumber,"move",MOVE);
- awkAddInt(CommandNumber,"move2",MOVE2);
- awkAddInt(CommandNumber,"move2i",MOVE2I);
- awkAddInt(CommandNumber,"move2s",MOVE2S);
- awkAddInt(CommandNumber,"movei",MOVEI);
- awkAddInt(CommandNumber,"moves",MOVES);
- awkAddInt(CommandNumber,"mswapbuffers",MSWAPBUFFERS);
- awkAddInt(CommandNumber,"multimap",MULTIMAP);
- awkAddInt(CommandNumber,"multmatrix",MULTMATRIX);
- awkAddInt(CommandNumber,"n3f",N3F);
- awkAddInt(CommandNumber,"newtag",NEWTAG);
- awkAddInt(CommandNumber,"nmode",NMODE);
- awkAddInt(CommandNumber,"noborder",NOBORDER);
- awkAddInt(CommandNumber,"noise",NOISE);
- awkAddInt(CommandNumber,"noport",NOPORT);
- awkAddInt(CommandNumber,"normal",NORMAL);
- awkAddInt(CommandNumber,"objdelete",OBJDELETE);
- awkAddInt(CommandNumber,"objinsert",OBJINSERT);
- awkAddInt(CommandNumber,"objreplace",OBJREPLACE);
- awkAddInt(CommandNumber,"onemap",ONEMAP);
- awkAddInt(CommandNumber,"ortho",ORTHO);
- awkAddInt(CommandNumber,"orthoR",ORTHO2);
- awkAddInt(CommandNumber,"overlay",OVERLAY);
- awkAddInt(CommandNumber,"pagewritemask",PAGEWRITEMASK);
- awkAddInt(CommandNumber,"passthrough",PASSTHROUGH);
- awkAddInt(CommandNumber,"patch",PATCH);
- awkAddInt(CommandNumber,"patchbasis",PATCHBASIS);
- awkAddInt(CommandNumber,"patchcurves",PATCHCURVES);
- awkAddInt(CommandNumber,"patchprecision",PATCHPRECISION);
- awkAddInt(CommandNumber,"pclos",PCLOS);
- awkAddInt(CommandNumber,"pdr",PDR);
- awkAddInt(CommandNumber,"pdr2",PDR2);
- awkAddInt(CommandNumber,"pdr2i",PDR2I);
- awkAddInt(CommandNumber,"pdr2s",PDR2S);
- awkAddInt(CommandNumber,"pdri",PDRI);
- awkAddInt(CommandNumber,"pdrs",PDRS);
- awkAddInt(CommandNumber,"perspective",PERSPECTIVE);
- awkAddInt(CommandNumber,"pick",PICK);
- awkAddInt(CommandNumber,"picksize",PICKSIZE);
- awkAddInt(CommandNumber,"pixmode",PIXMODE);
- awkAddInt(CommandNumber,"pmv",PMV);
- awkAddInt(CommandNumber,"pmv2",PMV2);
- awkAddInt(CommandNumber,"pmv2i",PMV2I);
- awkAddInt(CommandNumber,"pmv2s",PMV2S);
- awkAddInt(CommandNumber,"pmvi",PMVI);
- awkAddInt(CommandNumber,"pmvs",PMVS);
- awkAddInt(CommandNumber,"pnt",PNT);
- awkAddInt(CommandNumber,"pnt2",PNT2);
- awkAddInt(CommandNumber,"pnt2i",PNT2I);
- awkAddInt(CommandNumber,"pnt2s",PNT2S);
- awkAddInt(CommandNumber,"pnti",PNTI);
- awkAddInt(CommandNumber,"pnts",PNTS);
- awkAddInt(CommandNumber,"pntsize",PNTSIZE);
- awkAddInt(CommandNumber,"pntsmooth",PNTSMOOTH);
- awkAddInt(CommandNumber,"polarview",POLARVIEW);
- awkAddInt(CommandNumber,"polf",POLF);
- awkAddInt(CommandNumber,"polf2",POLF2);
- awkAddInt(CommandNumber,"polf2i",POLF2I);
- awkAddInt(CommandNumber,"polf2s",POLF2S);
- awkAddInt(CommandNumber,"polfi",POLFI);
- awkAddInt(CommandNumber,"polfs",POLFS);
- awkAddInt(CommandNumber,"poly",POLY);
- awkAddInt(CommandNumber,"poly2",POLY2);
- awkAddInt(CommandNumber,"poly2i",POLY2I);
- awkAddInt(CommandNumber,"poly2s",POLY2S);
- awkAddInt(CommandNumber,"polyi",POLYI);
- awkAddInt(CommandNumber,"polymode",POLYMODE);
- awkAddInt(CommandNumber,"polys",POLYS);
- awkAddInt(CommandNumber,"polysmooth",POLYSMOOTH);
- awkAddInt(CommandNumber,"popattributes",POPATTRIBUTES);
- awkAddInt(CommandNumber,"popmatrix",POPMATRIX);
- awkAddInt(CommandNumber,"popname",POPNAME);
- awkAddInt(CommandNumber,"popviewport",POPVIEWPORT);
- awkAddInt(CommandNumber,"prefposition",PREFPOSITION);
- awkAddInt(CommandNumber,"prefsize",PREFSIZE);
- awkAddInt(CommandNumber,"pushattributes",PUSHATTRIBUTES);
- awkAddInt(CommandNumber,"pushmatrix",PUSHMATRIX);
- awkAddInt(CommandNumber,"pushname",PUSHNAME);
- awkAddInt(CommandNumber,"pushviewport",PUSHVIEWPORT);
- awkAddInt(CommandNumber,"qdevice",QDEVICE);
- awkAddInt(CommandNumber,"qenter",QENTER);
- awkAddInt(CommandNumber,"qreset",QRESET);
- awkAddInt(CommandNumber,"rcrv",RCRV);
- awkAddInt(CommandNumber,"rcrvn",RCRVN);
- awkAddInt(CommandNumber,"rdr",RDR);
- awkAddInt(CommandNumber,"rdr2",RDR2);
- awkAddInt(CommandNumber,"rdr2i",RDR2I);
- awkAddInt(CommandNumber,"rdr2s",RDR2S);
- awkAddInt(CommandNumber,"rdri",RDRI);
- awkAddInt(CommandNumber,"rdrs",RDRS);
- awkAddInt(CommandNumber,"readsource",READSOURCE);
- awkAddInt(CommandNumber,"rect",RECT);
- awkAddInt(CommandNumber,"rectcopy",RECTCOPY);
- awkAddInt(CommandNumber,"rectf",RECTF);
- awkAddInt(CommandNumber,"rectfi",RECTFI);
- awkAddInt(CommandNumber,"rectfs",RECTFS);
- awkAddInt(CommandNumber,"recti",RECTI);
- awkAddInt(CommandNumber,"rects",RECTS);
- awkAddInt(CommandNumber,"rectwrite",RECTWRITE);
- awkAddInt(CommandNumber,"rectzoom",RECTZOOM);
- awkAddInt(CommandNumber,"resetls",RESETLS);
- awkAddInt(CommandNumber,"reshapeviewport",RESHAPEVIEWPORT);
- awkAddInt(CommandNumber,"RGBcolor",RGBCOLOR);
- awkAddInt(CommandNumber,"RGBcursor",RGBCURSOR);
- awkAddInt(CommandNumber,"RGBmode",RGBMODE);
- awkAddInt(CommandNumber,"RGBrange",RGBRANGE);
- awkAddInt(CommandNumber,"RGBwritemask",RGBWRITEMASK);
- awkAddInt(CommandNumber,"ringbell",RINGBELL);
- awkAddInt(CommandNumber,"rmv",RMV);
- awkAddInt(CommandNumber,"rmv2",RMV2);
- awkAddInt(CommandNumber,"rmv2i",RMV2I);
- awkAddInt(CommandNumber,"rmv2s",RMV2S);
- awkAddInt(CommandNumber,"rmvi",RMVI);
- awkAddInt(CommandNumber,"rmvs",RMVS);
- awkAddInt(CommandNumber,"rot",ROT);
- awkAddInt(CommandNumber,"rotate",ROTATE);
- awkAddInt(CommandNumber,"rpatch",RPATCH);
- awkAddInt(CommandNumber,"rpdr",RPDR);
- awkAddInt(CommandNumber,"rpdr2",RPDR2);
- awkAddInt(CommandNumber,"rpdr2i",RPDR2I);
- awkAddInt(CommandNumber,"rpdr2s",RPDR2S);
- awkAddInt(CommandNumber,"rpdri",RPDRI);
- awkAddInt(CommandNumber,"rpdrs",RPDRS);
- awkAddInt(CommandNumber,"rpmv",RPMV);
- awkAddInt(CommandNumber,"rpmv2",RPMV2);
- awkAddInt(CommandNumber,"rpmv2i",RPMV2I);
- awkAddInt(CommandNumber,"rpmv2s",RPMV2S);
- awkAddInt(CommandNumber,"rpmvi",RPMVI);
- awkAddInt(CommandNumber,"rpmvs",RPMVS);
- awkAddInt(CommandNumber,"sbox",SBOX);
- awkAddInt(CommandNumber,"sboxf",SBOXF);
- awkAddInt(CommandNumber,"scale",SCALE);
- awkAddInt(CommandNumber,"sclear",SCLEAR);
- awkAddInt(CommandNumber,"scrbox",SCRBOX);
- awkAddInt(CommandNumber,"screenspace",SCREENSPACE);
- awkAddInt(CommandNumber,"scrmask",SCRMASK);
- awkAddInt(CommandNumber,"scrsubdivide",SCRSUBDIVIDE);
- awkAddInt(CommandNumber,"setbell",SETBELL);
- awkAddInt(CommandNumber,"setcursor",SETCURSOR);
- awkAddInt(CommandNumber,"setdblights",SETDBLIGHTS);
- awkAddInt(CommandNumber,"setdepth",SETDEPTH);
- awkAddInt(CommandNumber,"setlinestyle",SETLINESTYLE);
- awkAddInt(CommandNumber,"setmap",SETMAP);
- awkAddInt(CommandNumber,"setmonitor",SETMONITOR);
- awkAddInt(CommandNumber,"setpattern",SETPATTERN);
- awkAddInt(CommandNumber,"setshade",SETSHADE);
- awkAddInt(CommandNumber,"setvaluator",SETVALUATOR);
- awkAddInt(CommandNumber,"setvideo",SETVIDEO);
- awkAddInt(CommandNumber,"shademodel",SHADEMODEL);
- awkAddInt(CommandNumber,"shaderange",SHADERANGE);
- awkAddInt(CommandNumber,"singlebuffer",SINGLEBUFFER);
- awkAddInt(CommandNumber,"spclos",SPCLOS);
- awkAddInt(CommandNumber,"splf",SPLF);
- awkAddInt(CommandNumber,"splfR",SPLF2);
- awkAddInt(CommandNumber,"splfRi",SPLF2I);
- awkAddInt(CommandNumber,"splfRs",SPLF2S);
- awkAddInt(CommandNumber,"splfi",SPLFI);
- awkAddInt(CommandNumber,"splfs",SPLFS);
- awkAddInt(CommandNumber,"stencil",STENCIL);
- awkAddInt(CommandNumber,"stensize",STENSIZE);
- awkAddInt(CommandNumber,"stepunit",STEPUNIT);
- awkAddInt(CommandNumber,"subpixel",SUBPIXEL);
- awkAddInt(CommandNumber,"swapbuffers",SWAPBUFFERS);
- awkAddInt(CommandNumber,"swapinterval",SWAPINTERVAL);
- awkAddInt(CommandNumber,"swaptmesh",SWAPTMESH);
- awkAddInt(CommandNumber,"t2f",T2F);
- awkAddInt(CommandNumber,"tevbind",TEVBIND);
- awkAddInt(CommandNumber,"tevdef",TEVDEF);
- awkAddInt(CommandNumber,"texbind",TEXBIND);
- awkAddInt(CommandNumber,"texdef2d",TEXDEF2D);
- awkAddInt(CommandNumber,"texgen",TEXGEN);
- awkAddInt(CommandNumber,"textinit",TEXTINIT);
- awkAddInt(CommandNumber,"textwritemask",TEXTWRITEMASK);
- awkAddInt(CommandNumber,"tie",TIE);
- awkAddInt(CommandNumber,"tpoff",TPOFF);
- awkAddInt(CommandNumber,"tpon",TPON);
- awkAddInt(CommandNumber,"translate",TRANSLATE);
- awkAddInt(CommandNumber,"underlay",UNDERLAY);
- awkAddInt(CommandNumber,"unqdevice",UNQDEVICE);
- awkAddInt(CommandNumber,"v2d",V2D);
- awkAddInt(CommandNumber,"v2f",V2F);
- awkAddInt(CommandNumber,"v2i",V2I);
- awkAddInt(CommandNumber,"v2s",V2S);
- awkAddInt(CommandNumber,"v3d",V3D);
- awkAddInt(CommandNumber,"v3f",V3F);
- awkAddInt(CommandNumber,"v3i",V3I);
- awkAddInt(CommandNumber,"v3s",V3S);
- awkAddInt(CommandNumber,"v4d",V4D);
- awkAddInt(CommandNumber,"v4f",V4F);
- awkAddInt(CommandNumber,"v4i",V4I);
- awkAddInt(CommandNumber,"v4s",V4S);
- awkAddInt(CommandNumber,"viewport",VIEWPORT);
- /* awkAddInt(CommandNumber,"winclose",WINCLOSE); */
- awkAddInt(CommandNumber,"winconstraints",WINCONSTRAINTS);
- awkAddInt(CommandNumber,"window",WINDOW);
- awkAddInt(CommandNumber,"winmove",WINMOVE);
- awkAddInt(CommandNumber,"winpop",WINPOP);
- awkAddInt(CommandNumber,"winposition",WINPOSITION);
- awkAddInt(CommandNumber,"winpush",WINPUSH);
- awkAddInt(CommandNumber,"winset",WINSET);
- awkAddInt(CommandNumber,"wintitle",WINTITLE);
- awkAddInt(CommandNumber,"wmpack",WMPACK);
- awkAddInt(CommandNumber,"writemask",WRITEMASK);
- awkAddInt(CommandNumber,"writepixels",WRITEPIXELS);
- awkAddInt(CommandNumber,"writeRGB",WRITERGB);
- awkAddInt(CommandNumber,"xfpt",XFPT);
- awkAddInt(CommandNumber,"xfpt2",XFPT2);
- awkAddInt(CommandNumber,"xfpt2i",XFPT2I);
- awkAddInt(CommandNumber,"xfpt2s",XFPT2S);
- awkAddInt(CommandNumber,"xfpt4",XFPT4);
- awkAddInt(CommandNumber,"xfpt4i",XFPT4I);
- awkAddInt(CommandNumber,"xfpt4s",XFPT4S);
- awkAddInt(CommandNumber,"xfpti",XFPTI);
- awkAddInt(CommandNumber,"xfpts",XFPTS);
- awkAddInt(CommandNumber,"zbuffer",ZBUFFER);
- awkAddInt(CommandNumber,"zclear",ZCLEAR);
- awkAddInt(CommandNumber,"zdraw",ZDRAW);
- awkAddInt(CommandNumber,"zfunction",ZFUNCTION);
- awkAddInt(CommandNumber,"zsource",ZSOURCE);
- awkAddInt(CommandNumber,"zwritemask",ZWRITEMASK);
-
- awkAddInt(CommandNumber,"bgngroup",BGNGROUP);
- awkAddInt(CommandNumber,"endgroup",ENDGROUP);
- awkAddInt(CommandNumber,"grouptype",GROUPTYPE);
-
- awkAddInt(CommandNumber,"fogvertex",TEXFOGVERTEX);
- awkAddInt(CommandNumber,"fginit",FGINIT);
- awkAddInt(CommandNumber,"texcontour",TEXCONTOUR);
- awkAddInt(CommandNumber,"texscale",TEXSCALE);
- awkAddInt(CommandNumber,"polyimage",POLYIMAGE);
-
- awkAddInt(Constant,"TRUE",TRUE);
- awkAddInt(Constant,"FALSE",FALSE);
- awkAddInt(Constant,"BLACK",BLACK);
- awkAddInt(Constant,"RED",RED);
- awkAddInt(Constant,"GREEN",GREEN);
- awkAddInt(Constant,"YELLOW",YELLOW);
- awkAddInt(Constant,"BLUE",BLUE);
- awkAddInt(Constant,"MAGENTA",MAGENTA);
- awkAddInt(Constant,"CYAN",CYAN);
- awkAddInt(Constant,"WHITE",WHITE);
- awkAddInt(Constant,"PUP_CLEAR",PUP_CLEAR);
- awkAddInt(Constant,"PUP_CURSOR",PUP_CURSOR);
- awkAddInt(Constant,"PUP_BLACK",PUP_BLACK);
- awkAddInt(Constant,"PUP_WHITE",PUP_WHITE);
- awkAddInt(Constant,"NORMALDRAW",NORMALDRAW);
- awkAddInt(Constant,"PUPDRAW",PUPDRAW);
- awkAddInt(Constant,"OVERDRAW",OVERDRAW);
- awkAddInt(Constant,"UNDERDRAW",UNDERDRAW);
- awkAddInt(Constant,"CURSORDRAW",CURSORDRAW);
- awkAddInt(Constant,"NORMALDRAW|OVERDRAW",NORMALDRAW|OVERDRAW);
- awkAddInt(Constant,"NORMALDRAW|UNDERDRAW",NORMALDRAW|UNDERDRAW);
- awkAddInt(Constant,"PATTERN_16",PATTERN_16);
- awkAddInt(Constant,"PATTERN_32",PATTERN_32);
- awkAddInt(Constant,"PATTERN_64",PATTERN_64);
- awkAddInt(Constant,"PATTERN_16_SIZE",PATTERN_16_SIZE);
- awkAddInt(Constant,"PATTERN_32_SIZE",PATTERN_32_SIZE);
- awkAddInt(Constant,"PATTERN_64_SIZE",PATTERN_64_SIZE);
- awkAddInt(Constant,"SRC_AUTO",SRC_AUTO);
- awkAddInt(Constant,"SRC_FRONT",SRC_FRONT);
- awkAddInt(Constant,"SRC_BACK",SRC_BACK);
- awkAddInt(Constant,"SRC_ZBUFFER",SRC_ZBUFFER);
- awkAddInt(Constant,"BF_ZERO",BF_ZERO);
- awkAddInt(Constant,"BF_ONE",BF_ONE);
- awkAddInt(Constant,"BF_DC",BF_DC);
- awkAddInt(Constant,"BF_SC",BF_SC);
- awkAddInt(Constant,"BF_MDC",BF_MDC);
- awkAddInt(Constant,"BF_MSC",BF_MSC);
- awkAddInt(Constant,"BF_SA",BF_SA);
- awkAddInt(Constant,"BF_MSA",BF_MSA);
- awkAddInt(Constant,"BF_DA",BF_DA);
- awkAddInt(Constant,"BF_MDA",BF_MDA);
- awkAddInt(Constant,"BF_MIN_SA_MDA",BF_MIN_SA_MDA);
- awkAddInt(Constant,"AF_NEVER",AF_NEVER);
- awkAddInt(Constant,"AF_LESS",AF_LESS);
- awkAddInt(Constant,"AF_EQUAL",AF_EQUAL);
- awkAddInt(Constant,"AF_LEQUAL",AF_LEQUAL);
- awkAddInt(Constant,"AF_GREATER",AF_GREATER);
- awkAddInt(Constant,"AF_NOTEQUAL",AF_NOTEQUAL);
- awkAddInt(Constant,"AF_GEQUAL",AF_GEQUAL);
- awkAddInt(Constant,"AF_ALWAYS",AF_ALWAYS);
- awkAddInt(Constant,"ZF_NEVER",ZF_NEVER);
- awkAddInt(Constant,"ZF_LESS",ZF_LESS);
- awkAddInt(Constant,"ZF_EQUAL",ZF_EQUAL);
- awkAddInt(Constant,"ZF_LEQUAL",ZF_LEQUAL);
- awkAddInt(Constant,"ZF_GREATER",ZF_GREATER);
- awkAddInt(Constant,"ZF_NOTEQUAL",ZF_NOTEQUAL);
- awkAddInt(Constant,"ZF_GEQUAL",ZF_GEQUAL);
- awkAddInt(Constant,"ZF_ALWAYS",ZF_ALWAYS);
- awkAddInt(Constant,"ZSRC_DEPTH",ZSRC_DEPTH);
- awkAddInt(Constant,"ZSRC_COLOR",ZSRC_COLOR);
- awkAddInt(Constant,"SMP_OFF",SMP_OFF);
- awkAddInt(Constant,"SMP_ON",SMP_ON);
- awkAddInt(Constant,"SMP_SMOOTHER",SMP_SMOOTHER);
- awkAddInt(Constant,"SMP_ON|SMP_SMOOTHER",SMP_ON|SMP_SMOOTHER);
- awkAddInt(Constant,"SML_OFF",SML_OFF);
- awkAddInt(Constant,"SML_ON",SML_ON);
- awkAddInt(Constant,"SML_SMOOTHER",SML_SMOOTHER);
- awkAddInt(Constant,"SML_ON|SML_SMOOTHER",SML_ON|SML_SMOOTHER);
- awkAddInt(Constant,"SML_END_CORRECT",SML_END_CORRECT);
- awkAddInt(Constant,"SML_ON|SML_END_CORRECT",SML_ON|SML_END_CORRECT);
- awkAddInt(Constant,"SML_SMOOTHER|SML_END_CORRECT",
- SML_SMOOTHER|SML_END_CORRECT);
- awkAddInt(Constant,"SML_ON|SML_SMOOTHER|SML_END_CORRECT",
- SML_ON|SML_SMOOTHER|SML_END_CORRECT);
- awkAddInt(Constant,"PYSM_OFF",PYSM_OFF);
- awkAddInt(Constant,"PYSM_ON",PYSM_ON);
- awkAddInt(Constant,"PYSM_SHRINK",PYSM_SHRINK);
- awkAddInt(Constant,"GLC_OLDPOLYGON",GLC_OLDPOLYGON);
- awkAddInt(Constant,"GLC_ZRANGEMAP",GLC_ZRANGEMAP);
- awkAddInt(Constant,"C16X1",C16X1);
- awkAddInt(Constant,"C16X2",C16X2);
- awkAddInt(Constant,"C32X1",C32X1);
- awkAddInt(Constant,"C32X2",C32X2);
- awkAddInt(Constant,"CCROSS",CCROSS);
- awkAddInt(Constant,"FLAT",FLAT);
- awkAddInt(Constant,"GOURAUD",GOURAUD);
- awkAddInt(Constant,"LO_ZERO",LO_ZERO);
- awkAddInt(Constant,"LO_AND",LO_AND);
- awkAddInt(Constant,"LO_ANDR",LO_ANDR);
- awkAddInt(Constant,"LO_SRC",LO_SRC);
- awkAddInt(Constant,"LO_ANDI",LO_ANDI);
- awkAddInt(Constant,"LO_DST",LO_DST);
- awkAddInt(Constant,"LO_XOR",LO_XOR);
- awkAddInt(Constant,"LO_OR",LO_OR);
- awkAddInt(Constant,"LO_NOR",LO_NOR);
- awkAddInt(Constant,"LO_XNOR",LO_XNOR);
- awkAddInt(Constant,"LO_NDST",LO_NDST);
- awkAddInt(Constant,"LO_ORR",LO_ORR);
- awkAddInt(Constant,"LO_NSRC",LO_NSRC);
- awkAddInt(Constant,"LO_ORI",LO_ORI);
- awkAddInt(Constant,"LO_NAND",LO_NAND);
- awkAddInt(Constant,"LO_ONE",LO_ONE);
- awkAddInt(Constant,"ST_KEEP",ST_KEEP);
- awkAddInt(Constant,"ST_ZERO",ST_ZERO);
- awkAddInt(Constant,"ST_REPLACE",ST_REPLACE);
- awkAddInt(Constant,"ST_INCR",ST_INCR);
- awkAddInt(Constant,"ST_DECR",ST_DECR);
- awkAddInt(Constant,"ST_INVERT",ST_INVERT);
- awkAddInt(Constant,"SF_NEVER",SF_NEVER);
- awkAddInt(Constant,"SF_LESS",SF_LESS);
- awkAddInt(Constant,"SF_EQUAL",SF_EQUAL);
- awkAddInt(Constant,"SF_LEQUAL",SF_LEQUAL);
- awkAddInt(Constant,"SF_GREATER",SF_GREATER);
- awkAddInt(Constant,"SF_NOTEQUAL",SF_NOTEQUAL);
- awkAddInt(Constant,"SF_GEQUAL",SF_GEQUAL);
- awkAddInt(Constant,"SF_ALWAYS",SF_ALWAYS);
- awkAddInt(Constant,"SS_OFF",SS_OFF);
- awkAddInt(Constant,"SS_DEPTH",SS_DEPTH);
- awkAddInt(Constant,"PYM_FILL",PYM_FILL);
- awkAddInt(Constant,"PYM_POINT",PYM_POINT);
- awkAddInt(Constant,"PYM_LINE",PYM_LINE);
- awkAddInt(Constant,"PYM_HOLLOW",PYM_HOLLOW);
- awkAddInt(Constant,"FG_OFF",FG_OFF);
- awkAddInt(Constant,"FG_ON",FG_ON);
- awkAddInt(Constant,"FG_DEFINE",FG_DEFINE);
- awkAddInt(Constant,"PM_SHIFT",PM_SHIFT);
- awkAddInt(Constant,"PM_EXPAND",PM_EXPAND);
- awkAddInt(Constant,"PM_C0",PM_C0);
- awkAddInt(Constant,"PM_C1",PM_C1);
- awkAddInt(Constant,"PM_ADD24",PM_ADD24);
- awkAddInt(Constant,"PM_SIZE",PM_SIZE);
- awkAddInt(Constant,"PM_OFFSET",PM_OFFSET);
- awkAddInt(Constant,"PM_STRIDE",PM_STRIDE);
- awkAddInt(Constant,"PM_TTOB",PM_TTOB);
- awkAddInt(Constant,"PM_RTOL",PM_RTOL);
- awkAddInt(Constant,"PM_ZDATA",PM_ZDATA);
- awkAddInt(Constant,"NAUTO",NAUTO);
- awkAddInt(Constant,"NNORMALIZE",NNORMALIZE);
- awkAddInt(Constant,"AC_CLEAR",AC_CLEAR);
- awkAddInt(Constant,"AC_ACCUMULATE",AC_ACCUMULATE);
- awkAddInt(Constant,"AC_CLEAR_ACCUMULATE",AC_CLEAR_ACCUMULATE);
- awkAddInt(Constant,"AC_RETURN",AC_RETURN);
- awkAddInt(Constant,"AC_MULT",AC_MULT);
- awkAddInt(Constant,"AC_ADD",AC_ADD);
- awkAddInt(Constant,"CP_OFF",CP_OFF);
- awkAddInt(Constant,"CP_ON",CP_ON);
- awkAddInt(Constant,"CP_DEFINE",CP_DEFINE);
- awkAddInt(Constant,"SB_RESET",SB_RESET);
- awkAddInt(Constant,"SB_TRACK",SB_TRACK);
- awkAddInt(Constant,"SB_HOLD",SB_HOLD);
- awkAddInt(Constant,"LMNULL",LMNULL);
- awkAddInt(Constant,"MSINGLE",MSINGLE);
- awkAddInt(Constant,"MPROJECTION",MPROJECTION);
- awkAddInt(Constant,"MVIEWING",MVIEWING);
- awkAddInt(Constant,"MTEXTURE",MTEXTURE);
- awkAddInt(Constant,"DEFMATERIAL",DEFMATERIAL);
- awkAddInt(Constant,"EMISSION",EMISSION);
- awkAddInt(Constant,"AMBIENT",AMBIENT);
- awkAddInt(Constant,"DIFFUSE",DIFFUSE);
- awkAddInt(Constant,"SPECULAR",SPECULAR);
- awkAddInt(Constant,"SHININESS",SHININESS);
- awkAddInt(Constant,"COLORINDEXES",COLORINDEXES);
- awkAddInt(Constant,"ALPHA",ALPHA);
- awkAddInt(Constant,"DEFLIGHT",DEFLIGHT);
- awkAddInt(Constant,"LCOLOR",LCOLOR);
- awkAddInt(Constant,"POSITION",POSITION);
- awkAddInt(Constant,"SPOTDIRECTION",SPOTDIRECTION);
- awkAddInt(Constant,"SPOTLIGHT",SPOTLIGHT);
- awkAddInt(Constant,"DEFLMODEL",DEFLMODEL);
- awkAddInt(Constant,"LOCALVIEWER",LOCALVIEWER);
- awkAddInt(Constant,"ATTENUATION",ATTENUATION);
- awkAddInt(Constant,"ATTENUATION2",ATTENUATION2);
- awkAddInt(Constant,"TWOSIDE",TWOSIDE);
- awkAddInt(Constant,"MATERIAL",MATERIAL);
- awkAddInt(Constant,"BACKMATERIAL",BACKMATERIAL);
- awkAddInt(Constant,"LIGHT0",LIGHT0);
- awkAddInt(Constant,"LIGHT1",LIGHT1);
- awkAddInt(Constant,"LIGHT2",LIGHT2);
- awkAddInt(Constant,"LIGHT3",LIGHT3);
- awkAddInt(Constant,"LIGHT4",LIGHT4);
- awkAddInt(Constant,"LIGHT5",LIGHT5);
- awkAddInt(Constant,"LIGHT6",LIGHT6);
- awkAddInt(Constant,"LIGHT7",LIGHT7);
- awkAddInt(Constant,"LMODEL",LMODEL);
- awkAddInt(Constant,"LMC_COLOR",LMC_COLOR);
- awkAddInt(Constant,"LMC_EMISSION",LMC_EMISSION);
- awkAddInt(Constant,"LMC_AMBIENT",LMC_AMBIENT);
- awkAddInt(Constant,"LMC_DIFFUSE",LMC_DIFFUSE);
- awkAddInt(Constant,"LMC_SPECULAR",LMC_SPECULAR);
- awkAddInt(Constant,"LMC_AD",LMC_AD);
- awkAddInt(Constant,"LMC_NULL",LMC_NULL);
- awkAddInt(Constant,"TX_MINFILTER",TX_MINFILTER);
- awkAddInt(Constant,"TX_MAGFILTER",TX_MAGFILTER);
- awkAddInt(Constant,"TX_WRAP",TX_WRAP);
- awkAddInt(Constant,"TX_WRAP_S",TX_WRAP_S);
- awkAddInt(Constant,"TX_WRAP_T",TX_WRAP_T);
- awkAddInt(Constant,"TX_TILE",TX_TILE);
- awkAddInt(Constant,"TX_NULL",TX_NULL);
- awkAddInt(Constant,"TX_POINT",TX_POINT);
- awkAddInt(Constant,"TX_BILINEAR",TX_BILINEAR);
- awkAddInt(Constant,"TX_MIPMAP_POINT",TX_MIPMAP_POINT);
- awkAddInt(Constant,"TX_MIPMAP_LINEAR",TX_MIPMAP_LINEAR);
- awkAddInt(Constant,"TX_MIPMAP_BILINEAR",TX_MIPMAP_BILINEAR);
- awkAddInt(Constant,"TX_MIPMAP_TRILINEAR",TX_MIPMAP_TRILINEAR);
- awkAddInt(Constant,"TX_REPEAT",TX_REPEAT);
- awkAddInt(Constant,"TX_CLAMP",TX_CLAMP);
- awkAddInt(Constant,"TX_SELECT",TX_SELECT);
- awkAddInt(Constant,"TX_TEXTURE_0",TX_TEXTURE_0);
- awkAddInt(Constant,"TV_MODULATE",TV_MODULATE);
- awkAddInt(Constant,"TV_BLEND",TV_BLEND);
- awkAddInt(Constant,"TV_DECAL",TV_DECAL);
- awkAddInt(Constant,"TV_COLOR",TV_COLOR);
- awkAddInt(Constant,"TV_NULL",TV_NULL);
- awkAddInt(Constant,"TV_ENV0",TV_ENV0);
- awkAddInt(Constant,"TX_S",TX_S);
- awkAddInt(Constant,"TX_T",TX_T);
- awkAddInt(Constant,"TG_OFF",TG_OFF);
- awkAddInt(Constant,"TG_ON",TG_ON);
- awkAddInt(Constant,"TG_CONTOUR",TG_CONTOUR);
- awkAddInt(Constant,"TG_LINEAR",TG_LINEAR);
-
- awkAddInt(Constant,"GRP_POINT",GRP_POINT);
- awkAddInt(Constant,"GRP_LINE",GRP_LINE);
- awkAddInt(Constant,"GRP_CLOSEDLINE",GRP_CLOSEDLINE);
- awkAddInt(Constant,"GRP_POLYGON",GRP_POLYGON);
- awkAddInt(Constant,"GRP_TMESH",GRP_TMESH);
- awkAddInt(Constant,"GRP_HOLLOWPOLY",GRP_HOLLOWPOLY);
- }
-
- static long *nextword = 0;
- static long wordsleft = 0;
-
- /*
- * Malloc and initialize a single element
- */
-
- static element_t *make_element(void (*func)(), int words) {
- element_t* sp;
- int offset;
- int size;
- int maxsize;
- int aligned; /* could become an argument - compute it for now */
-
- aligned = ((words>1) && (words<5));
- size = NONDATASIZE+words;
- if (aligned)
- maxsize = size+3;
- else
- maxsize = size;
- if (wordsleft < maxsize) {
- if ((nextword = (long*)malloc(MALLOCWORDS*4)) == 0) {
- fprintf(stderr,"make_element: malloc failed. abort.\n");
- awkExit();
- exit(1);
- }
- if ((long)nextword & 0x3) {
- fprintf(stderr,"make_element: malloc returned non-word addr\n");
- awkExit();
- exit(1);
- }
- wordsleft = MALLOCWORDS;
- }
- offset = 0;
- if (aligned) {
- int wordaddr;
- wordaddr = ((long)(nextword+NONDATASIZE)>>2) & 0x3;
- if ((wordaddr+words) > 4) {
- offset = 4-wordaddr;
- size += offset;
- }
- }
- sp = (element_t*)(nextword+offset);
- nextword += size;
- wordsleft -= size;
- sp->func = func;
- sp->next = 0;
- return sp;
- }
-
- /*
- * Report an error if incorrect number of arguments is received
- */
-
- static int argcount(int n) {
- if (n != (awkNF-1)) {
- fprintf(stderr,"%s line %d: incorrect argument count\n",
- awkFILENAME,awkNL);
- return 0;
- }
- return 1;
- }
-
- /*
- * Report an error if incorrect number of arguments is received
- */
-
- static int minargcount(int n) {
- if (n > (awkNF-1)) {
- fprintf(stderr,"%s line %d: insufficient argument count\n",
- awkFILENAME,awkNL);
- return 0;
- }
- return 1;
- }
-
- /*
- * Maintain max and min for x, y, and z
- */
-
- static void keepbounds(float x,float y,float z,float w) {
- if (w != 1.0) {
- x /= w;
- y /= w;
- z /= w;
- }
- if (x > xmax) xmax = x;
- if (x < xmin) xmin = x;
- if (y > ymax) ymax = y;
- if (y < ymin) ymin = y;
- if (z > zmax) zmax = z;
- if (z < zmin) zmin = z;
- vcount += 1;
- }
-
- void getbounds(float* Xmin,float* Xmax,float* Ymin,float* Ymax,float* Zmin,float* Zmax) {
- *Xmin = xmin;
- *Xmax = xmax;
- *Ymin = ymin;
- *Ymax = ymax;
- *Zmin = zmin;
- *Zmax = zmax;
- }
-
- static int ishexstr(char* s) {
- if (*s++ != '0')
- return FALSE;
- if (*s++ != 'x')
- return FALSE;
- while(TRUE) {
- switch(*s++) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case 'a':
- case 'b':
- case 'c':
- case 'd':
- case 'e':
- case 'f':
- case 'A':
- case 'B':
- case 'C':
- case 'D':
- case 'E':
- case 'F':
- break;
- case '\0':
- return TRUE;
- default:
- return FALSE;
- }
- }
- }
-
- static int isdecstr(char* s) {
- if (*s == '-' || *s == '+')
- s+=1;
- while(TRUE) {
- switch(*s++) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- break;
- case '\0':
- return TRUE;
- default:
- return FALSE;
- }
- }
- }
-
- static int isfloatstr(char* s) {
- int gotdpoint;
- gotdpoint = FALSE;
- if (*s == '-' || *s == '+')
- s+=1;
- while(TRUE) {
- switch(*s++) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- break;
- case '.':
- if (gotdpoint)
- return FALSE;
- else
- gotdpoint = TRUE;
- break;
- case 'e':
- case 'E':
- /* XXX - allows more than one exponent */
- return isfloatstr(s);
- case '\0':
- return TRUE;
- default:
- return FALSE;
- }
- }
- }
-
- /*
- * Interpret an input field as an integer
- */
-
- static int readint(int i) {
- register char* s;
- int j;
- s = awkARG[i+2];
- if (awkGetIndex(Constant,s))
- j = awkGetInt(Constant,s);
- else if (ishexstr(s))
- sscanf(s+2,"%x",&j);
- else if (isdecstr(s))
- sscanf(s,"%d",&j);
- else {
- fprintf(stderr,"%s line %d: unrecognized symbol <%s>\n",
- awkFILENAME,awkNL,s);
- exit(1);
- }
- return j;
- }
-
- /*
- * Interpret an input field as a float
- */
-
- static float readfloat(int i) {
- register char* s;
- float f;
- s = awkARG[i+2];
- if (awkGetIndex(Constant,s))
- f = awkGetInt(Constant,s);
- else if (isfloatstr(s))
- sscanf(s,"%f",&f);
- else {
- fprintf(stderr,"%s line %d: unrecognized symbol <%s>\n",
- awkFILENAME,awkNL,s);
- exit(1);
- }
- return f;
- }
-
- /*
- * Interpret an input field as a character
- */
-
- static int readchar(int i) {
- register char* s;
- s = awkARG[i+2];
- if (s[1])
- fprintf(stderr,"%s line %d: too many characters in field <%s>\n",
- awkFILENAME,awkNL,s);
- return s[0];
- }
-
- /*
- * Measure the length of an input field to be interpreted as a string
- */
-
- static int stringlength(int i) {
- return strlen(awkARG[i+2]);
- }
-
- /*
- * Interpret an input field as a string
- */
-
- static void readstring(int i,char* str) {
- register char *s;
- s = awkARG[i+2];
- while (*str++ = *s++);
- }
-
- /*
- * Interpret a line of input
- */
-
- static element_t *interpline(void) {
- element_t* sp;
- float_element_t* fp;
- int_element_t* ip;
- float fx,fy,fz,fw;
- float fx2,fy2,fz2;
- int command;
- int i;
- int size;
- int mode;
-
- command = awkGetInt(CommandNumber,awkARG[1]);
- if (command == 0) {
- if ((awkNF > 0) && (awkARG[1][0] != '#'))
- fprintf(stderr,"%s line %d: undefined command <%s>. ignored.\n",
- awkFILENAME,awkNL,awkARG[1]);
- return 0;
- }
-
- switch (command) {
- case ACBUF:
- if (!argcount(2))
- return 0;
- fp = (float_element_t*)make_element(interp_acbuf,2);
- fp->arg[0] = readint(0);
- fp->arg[1] = readfloat(1);
- return (element_t*)fp;
- case ACSIZE:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_acsize,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case AFUNCTION:
- if (!argcount(2))
- return 0;
- ip = (int_element_t*)make_element(interp_afunction,2);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- return (element_t*)ip;
- case ARC:
- if (!argcount(5))
- return 0;
- fp = (float_element_t*)make_element(interp_arc,5);
- fp->arg[0] = readfloat(0);
- fp->arg[1] = readfloat(1);
- fp->arg[2] = readfloat(2);
- fp->arg[3] = readfloat(3);
- fp->arg[4] = readfloat(4);
- return (element_t*)fp;
- case ARCF:
- if (!argcount(5))
- return 0;
- fp = (float_element_t*)make_element(interp_arcf,5);
- fp->arg[0] = readfloat(0);
- fp->arg[1] = readfloat(1);
- fp->arg[2] = readfloat(2);
- fp->arg[3] = readfloat(3);
- fp->arg[4] = readfloat(4);
- return (element_t*)fp;
- case BACKBUFFER:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_backbuffer,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case BACKFACE:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_backface,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case BGNCLOSEDLINE:
- if (!argcount(0))
- return 0;
- breakok = FALSE;
- return make_element(bgnclosedline,0);
- case BGNGROUP:
- if (!argcount(0))
- return 0;
- breakok = FALSE;
- return make_element(interp_bgngroup,0);
- case BGNLINE:
- if (!argcount(0))
- return 0;
- breakok = FALSE;
- return make_element(bgnline,0);
- case BGNPOINT:
- if (!argcount(0))
- return 0;
- breakok = FALSE;
- return make_element(bgnpoint,0);
- case BGNPOLYGON:
- if (!argcount(0))
- return 0;
- breakok = FALSE;
- return make_element(bgnpolygon,0);
- case BGNQSTRIP:
- if (!argcount(0))
- return 0;
- breakok = FALSE;
- return make_element(bgnqstrip,0);
- case BGNTMESH:
- if (!argcount(0))
- return 0;
- breakok = FALSE;
- return make_element(bgntmesh,0);
- case BLENDFUNCTION:
- if (!argcount(2))
- return 0;
- ip = (int_element_t*)make_element(interp_blendfunction,2);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- return (element_t*)ip;
- case BLINK:
- if (!argcount(5))
- return 0;
- ip = (int_element_t*)make_element(interp_blink,5);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- ip->arg[2] = readint(2);
- ip->arg[3] = readint(3);
- ip->arg[4] = readint(4);
- return (element_t*)ip;
- case BOX:
- if (!argcount(6))
- return 0;
- fp = (float_element_t*)make_element(interp_box,32);
- fx = readfloat(0);
- fy = readfloat(1);
- fz = readfloat(2);
- fx2 = readfloat(3);
- fy2 = readfloat(4);
- fz2 = readfloat(5);
- keepbounds(fx,fy,fz,1.0);
- keepbounds(fx2,fy2,fz2,1.0);
- if (fx > fx2) {float f; f = fx; fx = fx2; fx2 = f;}
- if (fy > fy2) {float f; f = fy; fy = fy2; fy2 = f;}
- if (fz > fz2) {float f; f = fz; fz = fz2; fz2 = f;}
- fp->arg[0] = fx;
- fp->arg[1] = fy;
- fp->arg[2] = fz;
- fp->arg[3] = 1;
- fp->arg[4] = fx2;
- fp->arg[5] = fy;
- fp->arg[6] = fz;
- fp->arg[7] = 1;
- fp->arg[8] = fx;
- fp->arg[9] = fy2;
- fp->arg[10] = fz;
- fp->arg[11] = 1;
- fp->arg[12] = fx2;
- fp->arg[13] = fy2;
- fp->arg[14] = fz;
- fp->arg[15] = 1;
- fp->arg[16] = fx;
- fp->arg[17] = fy;
- fp->arg[18] = fz2;
- fp->arg[19] = 1;
- fp->arg[20] = fx2;
- fp->arg[21] = fy;
- fp->arg[22] = fz2;
- fp->arg[23] = 1;
- fp->arg[24] = fx;
- fp->arg[25] = fy2;
- fp->arg[26] = fz2;
- fp->arg[27] = 1;
- fp->arg[28] = fx2;
- fp->arg[29] = fy2;
- fp->arg[30] = fz2;
- fp->arg[31] = 1;
- return (element_t*)fp;
- case C3I:
- if (!argcount(3))
- return 0;
- ip = (int_element_t*)make_element(c3i,3);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- ip->arg[2] = readint(2);
- return (element_t*)ip;
- case C3F:
- if (!argcount(3))
- return 0;
- fp = (float_element_t*)make_element(c3f,3);
- fp->arg[0] = readfloat(0);
- fp->arg[1] = readfloat(1);
- fp->arg[2] = readfloat(2);
- return (element_t*)fp;
- case C4I:
- if (!argcount(4))
- return 0;
- ip = (int_element_t*)make_element(c4i,4);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- ip->arg[2] = readint(2);
- ip->arg[3] = readint(3);
- return (element_t*)ip;
- case C4F:
- if (!argcount(4))
- return 0;
- fp = (float_element_t*)make_element(c4f,4);
- fp->arg[0] = readfloat(0);
- fp->arg[1] = readfloat(1);
- fp->arg[2] = readfloat(2);
- fp->arg[3] = readfloat(3);
- return (element_t*)fp;
- case CALLOBJ:
- if (!argcount(1))
- return 0;
- {
- char bigstring[100];
- readstring(0,bigstring);
- if (i = (int)awkGetPointer(FilePointers,bigstring)) {
- ip = (int_element_t*)make_element(interp_callobj,1);
- ip->arg[0] = i;
- }
- else {
- ip = (int_element_t*)make_element(interp_callobj,
- 1+((stringlength(0)+4)/4));
- ip->arg[0] = 0;
- strcpy((char*)&(ip->arg[1]),bigstring);
- }
- }
- return (element_t*)ip;
- break;
- case CHARSTR:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_charstr,(stringlength(0)+4)/4);
- readstring(0,(char*)&(ip->arg[0]));
- return (element_t*)ip;
- case CIRC:
- if (!argcount(3))
- return 0;
- fp = (float_element_t*)make_element(interp_circ,3);
- fp->arg[0] = readfloat(0);
- fp->arg[1] = readfloat(1);
- fp->arg[2] = readfloat(2);
- return (element_t*)fp;
- case CIRCF:
- if (!argcount(3))
- return 0;
- fp = (float_element_t*)make_element(interp_circf,3);
- fp->arg[0] = readfloat(0);
- fp->arg[1] = readfloat(1);
- fp->arg[2] = readfloat(2);
- return (element_t*)fp;
- case CLIPPLANE:
- if (!minargcount(2))
- return 0;
- size = awkNF - 1;
- fp = (float_element_t*)make_element(interp_clipplane,size);
- fp->arg[0] = (float)readint(0);
- fp->arg[1] = (float)readint(1);
- for (i=2; i<size; i++)
- fp->arg[i] = readfloat(i);
- return (element_t*)fp;
- case CLEAR:
- if (!argcount(0))
- return 0;
- return make_element(clear,0);
- case CMODE:
- if (!argcount(0))
- return 0;
- return make_element(cmode,0);
- case CMOV:
- if (!argcount(3))
- return 0;
- fp = (float_element_t*)make_element(interp_cmov,3);
- fp->arg[0] = readfloat(0);
- fp->arg[1] = readfloat(1);
- fp->arg[2] = readfloat(2);
- return (element_t*)fp;
- case COLOR:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_color,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case COLORF:
- if (!argcount(1))
- return 0;
- fp = (float_element_t*)make_element(interp_colorf,1);
- fp->arg[0] = readfloat(0);
- return (element_t*)fp;
- case CONCAVE:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_concave,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case CPACK:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_cpack,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case CZCLEAR:
- if (!argcount(2))
- return 0;
- ip = (int_element_t*)make_element(interp_czclear,2);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- return (element_t*)ip;
- case DEFLINESTYLE:
- if (!argcount(2))
- return 0;
- ip = (int_element_t*)make_element(interp_deflinestyle,2);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- return (element_t*)ip;
- case DEFPATTERN:
- if (!minargcount(18))
- return 0;
- i = readint(1);
- size = i * (i>>4);
- if (!argcount(size+2))
- return 0;
- ip = (int_element_t*)make_element(interp_defpattern,2+size);
- ip->arg[0] = readint(0);
- ip->arg[1] = i;
- for (i=0; i<size; i++)
- ip->arg[i+2] = readint(i+2);
- return (element_t*)ip;
- case DEPTHCUE:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_depthcue,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case DISPLACEPOLYGON:
- if (!argcount(1))
- return 0;
- fp = (float_element_t*)make_element(interp_displacepolygon,1);
- fp->arg[0] = readfloat(0);
- return (element_t*)fp;
- case DOUBLEBUFFER:
- if (!argcount(0))
- return 0;
- return make_element(doublebuffer,0);
- case DRAW:
- if (!argcount(3))
- return 0;
- breakok = FALSE;
- fp = (float_element_t*)make_element(interp_draw,3);
- fx = readfloat(0);
- fy = readfloat(1);
- fz = readfloat(2);
- keepbounds(fx,fy,fz,1.0);
- fp->arg[0] = fx;
- fp->arg[1] = fy;
- fp->arg[2] = fz;
- return (element_t*)fp;
- case DRAWMODE:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_drawmode,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case ENDCLOSEDLINE:
- if (!argcount(0))
- return 0;
- breakok = TRUE;
- return make_element(endclosedline,0);
- case ENDGROUP:
- if (!argcount(0))
- return 0;
- breakok = TRUE;
- return make_element(interp_endgroup,0);
- case ENDLINE:
- if (!argcount(0))
- return 0;
- breakok = TRUE;
- return make_element(endline,0);
- case ENDPOINT:
- if (!argcount(0))
- return 0;
- breakok = TRUE;
- return make_element(endpoint,0);
- case ENDPOLYGON:
- if (!argcount(0))
- return 0;
- breakok = TRUE;
- return make_element(endpolygon,0);
- case ENDQSTRIP:
- if (!argcount(0))
- return 0;
- breakok = TRUE;
- return make_element(endqstrip,0);
- case ENDTMESH:
- if (!argcount(0))
- return 0;
- breakok = TRUE;
- return make_element(endtmesh,0);
- case FOGVERTEX:
- if (!minargcount(1))
- return 0;
- size = awkNF - 1;
- fp = (float_element_t*)make_element(interp_clipplane,size);
- fp->arg[0] = (float)readint(0);
- for (i=1; i<size; i++)
- fp->arg[i] = readfloat(i);
- return (element_t*)fp;
- case FRONTBUFFER:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_frontbuffer,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case FRONTFACE:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_frontface,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case GCONFIG:
- if (!argcount(0))
- return 0;
- return make_element(gconfig,0);
- case GLCOMPAT:
- if (!argcount(2))
- return 0;
- ip = (int_element_t*)make_element(interp_glcompat,2);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- return (element_t*)ip;
- case GROUPTYPE:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_grouptype,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case HOLLOWCOLOR:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_hollowcolor,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case HOLLOWWIDTH:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_hollowwidth,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case LINESMOOTH:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_linesmooth,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case LINEWIDTH:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_linewidth,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case LMBIND:
- if (!argcount(2))
- return 0;
- ip = (int_element_t*)make_element(interp_lmbind,2);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- return (element_t*)ip;
- case LMCOLOR:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_lmcolor,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case LMDEF:
- if (!minargcount(4))
- return 0;
- size = awkNF - 1;
- fp = (float_element_t*)make_element(interp_lmdef,size);
- fp->arg[0] = (float)readint(0);
- fp->arg[1] = (float)readint(1);
- fp->arg[2] = (float)readint(2);
- for (i=3; i<size; i++)
- fp->arg[i] = readfloat(i);
- return (element_t*)fp;
- case LOADMATRIX:
- if (!argcount(16))
- return 0;
- fp = (float_element_t*)make_element(loadmatrix,16);
- for (i=0; i<16; i++)
- fp->arg[i] = readfloat(i);
- return (element_t*)fp;
- case LOGICOP:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_logicop,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case LOOKAT:
- if (!argcount(7))
- return 0;
- fp = (float_element_t*)make_element(interp_lookat,7);
- for (i=0; i<7; i++)
- fp->arg[i] = readfloat(i);
- return (element_t*)fp;
- case LRECTWRITE:
- if (!argcount(5))
- return 0;
- ip = (int_element_t*)make_element(interp_lrectwrite,5);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- ip->arg[2] = readint(2);
- ip->arg[3] = readint(3);
- {
- char bigstring[100];
- unsigned long* imagepointer;
- unsigned long** ipnt;
- readstring(4,bigstring);
- imagepointer = (unsigned long*)
- awkGetPointer(ImagePointer,bigstring);
- ipnt = (unsigned long**) &(ip->arg[4]);
- if (imagepointer) {
- *ipnt = imagepointer;
- }
- else {
- imagepointer = readimagedata(bigstring);
- *ipnt = imagepointer;
- awkAddPointer(ImagePointer,bigstring,imagepointer);
- }
- }
- return (element_t*)ip;
- case LRGBRANGE:
- if (!argcount(8))
- return 0;
- ip = (int_element_t*)make_element(interp_lrgbrange,8);
- for (i=0; i<8; i++)
- ip->arg[i] = readint(i);
- return (element_t*)ip;
- case LSETDEPTH:
- if (!argcount(2))
- return 0;
- ip = (int_element_t*)make_element(interp_lsetdepth,2);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- return (element_t*)ip;
- case LSHADERANGE:
- if (!argcount(4))
- return 0;
- ip = (int_element_t*)make_element(interp_lshaderange,4);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- ip->arg[2] = readint(2);
- ip->arg[3] = readint(3);
- return (element_t*)ip;
- case LSREPEAT:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_lsrepeat,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case MAPCOLOR:
- ip = (int_element_t*)make_element(interp_mapcolor,4);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- ip->arg[2] = readint(2);
- ip->arg[3] = readint(3);
- return (element_t*)ip;
- case MMODE:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_mmode,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case MOVE:
- if (!argcount(3))
- return 0;
- breakok = FALSE;
- fp = (float_element_t*)make_element(interp_move,3);
- fx = readfloat(0);
- fy = readfloat(1);
- fz = readfloat(2);
- keepbounds(fx,fy,fz,1.0);
- fp->arg[0] = fx;
- fp->arg[1] = fy;
- fp->arg[2] = fz;
- return (element_t*)fp;
- case MULTMATRIX:
- if (!argcount(16))
- return 0;
- fp = (float_element_t*)make_element(multmatrix,16);
- for (i=0; i<16; i++)
- fp->arg[i] = readfloat(i);
- return (element_t*)fp;
- case MSWAPBUFFERS:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_mswapbuffers,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case N3F:
- if (!argcount(3))
- return 0;
- fp = (float_element_t*)make_element(n3f,3);
- fp->arg[0] = readfloat(0);
- fp->arg[1] = readfloat(1);
- fp->arg[2] = readfloat(2);
- return (element_t*)fp;
- case NMODE:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_nmode,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case ORTHO:
- if (!argcount(6))
- return 0;
- fp = (float_element_t*)make_element(interp_ortho,6);
- for (i=0; i<6; i++)
- fp->arg[i] = readfloat(i);
- return (element_t*)fp;
- case ORTHO2:
- if (!argcount(4))
- return 0;
- fp = (float_element_t*)make_element(interp_ortho2,4);
- for (i=0; i<4; i++)
- fp->arg[i] = readfloat(i);
- return (element_t*)fp;
- case OVERLAY:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_overlay,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case PCLOS:
- if (!argcount(0))
- return 0;
- ip = (int_element_t*)make_element(pclos,0);
- return (element_t*)ip;
- case PDR:
- if (!argcount(3))
- return 0;
- breakok = FALSE;
- fp = (float_element_t*)make_element(interp_pdr,3);
- fx = readfloat(0);
- fy = readfloat(1);
- fz = readfloat(2);
- keepbounds(fx,fy,fz,1.0);
- fp->arg[0] = fx;
- fp->arg[1] = fy;
- fp->arg[2] = fz;
- return (element_t*)fp;
- case PERSPECTIVE:
- if (!argcount(4))
- return 0;
- fp = (float_element_t*)make_element(interp_perspective,4);
- fp->arg[0] = (float)readint(0);
- fp->arg[1] = readfloat(1);
- fp->arg[2] = readfloat(2);
- fp->arg[3] = readfloat(3);
- return (element_t*)fp;
- case PIXMODE:
- if (!argcount(2))
- return 0;
- ip = (int_element_t*)make_element(interp_pixmode,2);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- return (element_t*)ip;
- case PMV:
- if (!argcount(3))
- return 0;
- breakok = FALSE;
- fp = (float_element_t*)make_element(interp_pmv,3);
- fx = readfloat(0);
- fy = readfloat(1);
- fz = readfloat(2);
- keepbounds(fx,fy,fz,1.0);
- fp->arg[0] = fx;
- fp->arg[1] = fy;
- fp->arg[2] = fz;
- return (element_t*)fp;
- case PNT:
- if (!argcount(3))
- return 0;
- fp = (float_element_t*)make_element(interp_pnt,3);
- fx = readfloat(0);
- fy = readfloat(1);
- fz = readfloat(2);
- keepbounds(fx,fy,fz,1.0);
- fp->arg[0] = fx;
- fp->arg[1] = fy;
- fp->arg[2] = fz;
- return (element_t*)fp;
- case PNTSIZE:
- if (!argcount(1))
- return 0;
- fp = (float_element_t*)make_element(interp_pntsize,1);
- fp->arg[0] = readfloat(0);
- return (element_t*)fp;
- case PNTSMOOTH:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_pntsmooth,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case POLARVIEW:
- if (!argcount(4))
- return 0;
- fp = (float_element_t*)make_element(interp_polarview,4);
- fp->arg[0] = readfloat(0);
- fp->arg[1] = (float)readint(1);
- fp->arg[2] = (float)readint(2);
- fp->arg[3] = (float)readint(3);
- return (element_t*)fp;
- case POLF:
- if (!minargcount(4))
- return 0;
- breakok = TRUE;
- size = awkNF - 1;
- fp = (float_element_t*)make_element(interp_polf,size);
- fp->arg[0] = (float)readint(0);
- for (i=1; i<size; i+=3) {
- fx = readfloat(i+0);
- fy = readfloat(i+1);
- fz = readfloat(i+2);
- keepbounds(fx,fy,fz,1.0);
- fp->arg[i+0] = fx;
- fp->arg[i+1] = fy;
- fp->arg[i+2] = fz;
- }
- return (element_t*)fp;
- case POLY:
- if (!minargcount(4))
- return 0;
- breakok = TRUE;
- size = awkNF - 1;
- fp = (float_element_t*)make_element(interp_poly,size);
- fp->arg[0] = (float)readint(0);
- for (i=1; i<size; i+=3) {
- fx = readfloat(i+0);
- fy = readfloat(i+1);
- fz = readfloat(i+2);
- keepbounds(fx,fy,fz,1.0);
- fp->arg[i+0] = fx;
- fp->arg[i+1] = fy;
- fp->arg[i+2] = fz;
- }
- return (element_t*)fp;
- case POLYMODE:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_polymode,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case POLYSMOOTH:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_polysmooth,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case POPMATRIX:
- if (!argcount(0))
- return 0;
- return make_element(popmatrix,0);
- case PUSHMATRIX:
- if (!argcount(0))
- return 0;
- return make_element(pushmatrix,0);
- case READSOURCE:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_readsource,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case RECT:
- if (!argcount(4))
- return 0;
- breakok = TRUE;
- fp = (float_element_t*)make_element(interp_rect,4);
- fx = readfloat(0);
- fy = readfloat(1);
- fx2 = readfloat(2);
- fy2 = readfloat(3);
- keepbounds(fx,fy,0.0,1.0);
- keepbounds(fx,fy2,0.0,1.0);
- keepbounds(fx2,fy,0.0,1.0);
- keepbounds(fx2,fy2,0.0,1.0);
- fp->arg[0] = fx;
- fp->arg[1] = fy;
- fp->arg[2] = fx2;
- fp->arg[3] = fy2;
- return (element_t*)fp;
- case RECTCOPY:
- if (!argcount(6))
- return 0;
- ip = (int_element_t*)make_element(interp_rectcopy,6);
- for (i=0; i<6; i++)
- ip->arg[i] = readint(i);
- return (element_t*)ip;
- case RECTF:
- if (!argcount(4))
- return 0;
- breakok = TRUE;
- fp = (float_element_t*)make_element(interp_rectf,4);
- fx = readfloat(0);
- fy = readfloat(1);
- fx2 = readfloat(2);
- fy2 = readfloat(3);
- keepbounds(fx,fy,0.0,1.0);
- keepbounds(fx,fy2,0.0,1.0);
- keepbounds(fx2,fy,0.0,1.0);
- keepbounds(fx2,fy2,0.0,1.0);
- fp->arg[0] = fx;
- fp->arg[1] = fy;
- fp->arg[2] = fx2;
- fp->arg[3] = fy2;
- return (element_t*)fp;
- case RECTZOOM:
- if (!argcount(2))
- return 0;
- fp = (float_element_t*)make_element(interp_rectzoom,2);
- fp->arg[0] = readfloat(0);
- fp->arg[1] = readfloat(1);
- return (element_t*)fp;
- case RGBCOLOR:
- if (!argcount(3))
- return 0;
- ip = (int_element_t*)make_element(interp_RGBcolor,3);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- ip->arg[2] = readint(2);
- return (element_t*)ip;
- case RGBMODE:
- if (!argcount(0))
- return 0;
- return make_element(RGBmode,0);
- case RGBWRITEMASK:
- if (!argcount(3))
- return 0;
- ip = (int_element_t*)make_element(interp_RGBwritemask,3);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- ip->arg[2] = readint(2);
- return (element_t*)ip;
- case ROT:
- if (!argcount(2))
- return 0;
- fp = (float_element_t*)make_element(interp_rot,2);
- fp->arg[0] = readfloat(0);
- fp->arg[1] = (float)readchar(1);
- return (element_t*)fp;
- case ROTATE:
- if (!argcount(2))
- return 0;
- ip = (int_element_t*)make_element(interp_rotate,2);
- ip->arg[0] = readint(0);
- ip->arg[1] = readchar(1);
- return (element_t*)ip;
- case SBOX:
- if (!argcount(4))
- return 0;
- breakok = TRUE;
- fp = (float_element_t*)make_element(interp_sbox,4);
- fx = readfloat(0);
- fy = readfloat(1);
- fx2 = readfloat(2);
- fy2 = readfloat(3);
- keepbounds(fx,fy,0.0,1.0);
- keepbounds(fx2,fy2,0.0,1.0);
- fp->arg[0] = fx;
- fp->arg[1] = fy;
- fp->arg[2] = fx2;
- fp->arg[3] = fy2;
- return (element_t*)fp;
- case SBOXF:
- if (!argcount(4))
- return 0;
- breakok = TRUE;
- fp = (float_element_t*)make_element(interp_sboxf,4);
- fx = readfloat(0);
- fy = readfloat(1);
- fx2 = readfloat(2);
- fy2 = readfloat(3);
- keepbounds(fx,fy,0.0,1.0);
- keepbounds(fx2,fy2,0.0,1.0);
- fp->arg[0] = fx;
- fp->arg[1] = fy;
- fp->arg[2] = fx2;
- fp->arg[3] = fy2;
- return (element_t*)fp;
- case SCALE:
- if (!argcount(3))
- return 0;
- fp = (float_element_t*)make_element(interp_scale,3);
- fp->arg[0] = readfloat(0);
- fp->arg[1] = readfloat(1);
- fp->arg[2] = readfloat(2);
- return (element_t*)fp;
- case SCLEAR:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_sclear,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case SCRBOX:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_scrbox,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case SCRMASK:
- if (!argcount(4))
- return 0;
- ip = (int_element_t*)make_element(interp_scrmask,4);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- ip->arg[2] = readint(2);
- ip->arg[3] = readint(3);
- return (element_t*)ip;
- case SCRSUBDIVIDE:
- if (!minargcount(1))
- return 0;
- size = awkNF - 1;
- fp = (float_element_t*)make_element(interp_scrsubdivide,size);
- fp->arg[0] = (float)readint(0);
- for (i=1; i<size; i++)
- fp->arg[i] = readfloat(i);
- return (element_t*)fp;
- case SETDEPTH:
- if (!argcount(2))
- return 0;
- ip = (int_element_t*)make_element(interp_lsetdepth,2);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- return (element_t*)ip;
- case SETLINESTYLE:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_setlinestyle,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case SETPATTERN:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_setpattern,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case SHADEMODEL:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_shademodel,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case SHADERANGE:
- if (!argcount(4))
- return 0;
- ip = (int_element_t*)make_element(interp_shaderange,4);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- ip->arg[2] = readint(2);
- ip->arg[3] = readint(3);
- return (element_t*)ip;
- case STENCIL:
- if (!argcount(7))
- return 0;
- ip = (int_element_t*)make_element(interp_stencil,7);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- ip->arg[2] = readint(2);
- ip->arg[3] = readint(3);
- ip->arg[4] = readint(4);
- ip->arg[5] = readint(5);
- ip->arg[6] = readint(6);
- return (element_t*)ip;
- case STENSIZE:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_stensize,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case SINGLEBUFFER:
- if (!argcount(0))
- return 0;
- return make_element(singlebuffer,0);
- case SUBPIXEL:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_subpixel,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case SWAPBUFFERS:
- if (!argcount(0))
- return 0;
- return make_element(swapbuffers,0);
- case SWAPTMESH:
- if (!argcount(0))
- return 0;
- return make_element(swaptmesh,0);
- case SWRITEMASK:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_swritemask,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case T2F:
- if (!argcount(2))
- return 0;
- fp = (float_element_t*)make_element(t2f,2);
- fp->arg[0] = readfloat(0);
- fp->arg[1] = readfloat(1);
- return (element_t*)fp;
- case TEVBIND:
- if (!argcount(2))
- return 0;
- ip = (int_element_t*)make_element(interp_tevbind,2);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- return (element_t*)ip;
- case TEVDEF:
- if (!minargcount(3))
- return 0;
- size = awkNF - 1;
- fp = (float_element_t*)make_element(interp_tevdef,size);
- fp->arg[0] = readint(0);
- fp->arg[1] = readint(1);
- for (i=2; i<size; i++)
- fp->arg[i] = readfloat(i);
- return (element_t*)fp;
- case TEXBIND:
- if (!argcount(2))
- return 0;
- ip = (int_element_t*)make_element(interp_texbind,2);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- return (element_t*)ip;
- case TEXDEF2D:
- if (!minargcount(7))
- return 0;
- size = awkNF - 1;
- fp = (float_element_t*)make_element(interp_texdef2d,size);
- fp->arg[0] = readint(0);
- fp->arg[1] = readint(1);
- fp->arg[2] = readint(2);
- fp->arg[3] = readint(3);
- {
- char bigstring[100];
- unsigned long* imagepointer;
- unsigned long** ipnt;
- readstring(4,bigstring);
- imagepointer = (unsigned long*)
- awkGetPointer(ImagePointer,bigstring);
- ipnt = (unsigned long**) &(fp->arg[4]);
- if (imagepointer) {
- *ipnt = imagepointer;
- }
- else {
- imagepointer = readimagedata(bigstring);
- *ipnt = imagepointer;
- awkAddPointer(ImagePointer,bigstring,imagepointer);
- }
- }
- fp->arg[5] = readint(5);
- for (i=6; i<size; i++)
- fp->arg[i] = readfloat(i);
- return (element_t*)fp;
- case POLYIMAGE:
- if (!argcount(3))
- return 0;
- breakok = TRUE;
- ip = (int_element_t*)make_element(interp_polyimage,3);
- ip->arg[0] = readint(0);
- ip->arg[1] = readint(1);
- {
- char bigstring[100];
- unsigned long* imagepointer;
- unsigned long** ipnt;
- readstring(2,bigstring);
- imagepointer = (unsigned long*)
- awkGetPointer(ImagePointer,bigstring);
- ipnt = (unsigned long**) &(ip->arg[2]);
- if (imagepointer) {
- *ipnt = imagepointer;
- }
- else {
- imagepointer = readimagedata(bigstring);
- *ipnt = imagepointer;
- awkAddPointer(ImagePointer,bigstring,imagepointer);
- }
- }
- keepbounds(0.0,0.0,0.0,1.0);
- keepbounds((float)ip->arg[0],(float)ip->arg[1],0.0,1.0);
- return (element_t*)ip;
- case TEXGEN:
- if (!minargcount(2))
- return 0;
- size = awkNF - 1;
- fp = (float_element_t*)make_element(interp_texgen,size);
- fp->arg[0] = (float)readint(0);
- fp->arg[1] = (float)readint(1);
- for (i=2; i<size; i++)
- fp->arg[i] = readfloat(i);
- return (element_t*)fp;
- case TRANSLATE:
- if (!argcount(3))
- return 0;
- fp = (float_element_t*)make_element(interp_translate,3);
- fp->arg[0] = readfloat(0);
- fp->arg[1] = readfloat(1);
- fp->arg[2] = readfloat(2);
- return (element_t*)fp;
- case UNDERLAY:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_underlay,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case V2F:
- if (!argcount(2))
- return 0;
- fp = (float_element_t*)make_element(v2f,2);
- fx = readfloat(0);
- fy = readfloat(1);
- keepbounds(fx,fy,0,1.0);
- fp->arg[0] = fx;
- fp->arg[1] = fy;
- return (element_t*)fp;
- case V3F:
- if (!argcount(3))
- return 0;
- fp = (float_element_t*)make_element(v3f,3);
- fx = readfloat(0);
- fy = readfloat(1);
- fz = readfloat(2);
- keepbounds(fx,fy,fz,1.0);
- fp->arg[0] = fx;
- fp->arg[1] = fy;
- fp->arg[2] = fz;
- return (element_t*)fp;
- case V4F:
- if (!argcount(4))
- return 0;
- fp = (float_element_t*)make_element(v4f,4);
- fx = readfloat(0);
- fy = readfloat(1);
- fz = readfloat(2);
- fw = readfloat(3);
- keepbounds(fx,fy,fz,fw);
- fp->arg[0] = fx;
- fp->arg[1] = fy;
- fp->arg[2] = fz;
- fp->arg[3] = fw;
- return (element_t*)fp;
- case VIEWPORT:
- if (!argcount(4))
- return 0;
- ip = (int_element_t*)make_element(interp_viewport,4);
- for (i=0; i<4; i++)
- ip->arg[i] = readint(i);
- return (element_t*)ip;
- case WINDOW:
- if (!argcount(6))
- return 0;
- fp = (float_element_t*)make_element(interp_window,6);
- for (i=0; i<6; i++)
- fp->arg[i] = readfloat(i);
- return (element_t*)fp;
- case WMPACK:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_wmpack,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case WRITEMASK:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_writemask,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case ZBUFFER:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_zbuffer,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case ZCLEAR:
- if (!argcount(0))
- return 0;
- return make_element(zclear,0);
- case ZDRAW:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_zdraw,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case ZFUNCTION:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_zfunction,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case ZSOURCE:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_zsource,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- case ZWRITEMASK:
- if (!argcount(1))
- return 0;
- ip = (int_element_t*)make_element(interp_zwritemask,1);
- ip->arg[0] = readint(0);
- return (element_t*)ip;
- default:
- fprintf(stderr,"%s line %d: command %s not implemented, ignored\n",
- awkFILENAME,awkNL,awkARG[1]);
- return 0;
- }
- }
-
- static char* endname(char* s) {
- /* return pointer to file name after last "/" */
- register i;
- for (i=strlen(s)-1; i>=0; i--)
- if (s[i] == '/')
- return &s[i+1];
- return s;
- }
-
- /*
- * Open the named file and build an interp data structure
- */
-
- element_t* getinterpobj(char* filename) {
- element_t* base;
- register element_t* sp;
- element_t* newsp;
-
- awkFile(filename);
- base = 0;
- vcount = 0;
- while (awkNextRecord()) {
- if (newsp = interpline()) {
- if (base == 0) {
- base = sp = newsp;
- } else {
- sp->next = newsp;
- sp = newsp;
- }
- }
- if ((vcount > MAXVCOUNT) && breakok) {
- vcount = 0;
- newsp = make_element(interp_breakcheck,0);
- sp->next = newsp;
- sp = newsp;
- }
- }
- awkAddPointer(FilePointers,endname(filename),(char*)base);
- return base;
- }
-
- /*
- * Draw an interp data structure
- */
-
- void drawinterpobj(element_t* obj) {
- register element_t* sp;
-
- sp = obj;
- while (sp) {
- sp->func((float*)sp+NONDATASIZE);
- sp = sp->next;
- }
- }
-
- void setbreakfunction(void(*func)()) {
- breakfunction = func;
- }
-
- /*
- * Image file functions
- *
- */
- #include <gl/image.h>
-
- void sizeofimage(char* name, int* xsize, int* ysize) {
- IMAGE* image;
-
- image = iopen(name,"r");
- if(!image) {
- fprintf(stderr,"sizeofimage: can't open image file\n");
- exit(1);
- }
- *xsize = image->xsize;
- *ysize = image->ysize;
- iclose(image);
- }
-
- static void rgbtocpack(unsigned short* r,unsigned short* g,unsigned short* b,unsigned long* l,int n) {
- while(n--)
- *l++ = *r++ | ((*g++)<<8) | ((*b++)<<16) | 0xff000000;
- }
-
- static void cpacktorgba(unsigned long* l,unsigned short* r,unsigned short* g,unsigned short* b,unsigned short* a,int n) {
- long val;
-
- while(n--) {
- val = *l++;
- *r++ = val & 0xff;
- val >>= 8;
- *g++ = val & 0xff;
- val >>= 8;
- *b++ = val & 0xff;
- val >>= 8;
- *a++ = val & 0xff;
- }
- }
-
- unsigned long *readimagedata(char* name) {
- unsigned long* base;
- unsigned long* lptr;
- unsigned short* rbuf;
- unsigned short* gbuf;
- unsigned short* bbuf;
- IMAGE* image;
- int y;
-
- image = iopen(name,"r");
- if(!image) {
- fprintf(stderr,"readimagedata: can't open image file\n");
- exit(1);
- }
- base = (unsigned long *)malloc(image->xsize*image->ysize*sizeof(long));
- rbuf = (unsigned short *)malloc(image->xsize*sizeof(short));
- gbuf = (unsigned short *)malloc(image->xsize*sizeof(short));
- bbuf = (unsigned short *)malloc(image->xsize*sizeof(short));
- if(!base || !rbuf || !gbuf || !bbuf) {
- fprintf(stderr,"readimagedata: can't malloc enough memory\n");
- exit(1);
- }
- lptr = base;
- for(y=0; y<image->ysize; y++) {
- if(image->zsize>=3) {
- getrow(image,rbuf,y,0);
- getrow(image,gbuf,y,1);
- getrow(image,bbuf,y,2);
- rgbtocpack(rbuf,gbuf,bbuf,lptr,image->xsize);
- lptr += image->xsize;
- } else {
- getrow(image,rbuf,y,0);
- rgbtocpack(rbuf,rbuf,rbuf,lptr,image->xsize);
- lptr += image->xsize;
- }
- }
- iclose(image);
- free(rbuf);
- free(gbuf);
- free(bbuf);
- return base;
- }
-
- void writeimagedata(char* name,unsigned long* lbuf,int xsize,int ysize) {
- int y;
- IMAGE* oimage;
- unsigned short rbuf[1280];
- unsigned short gbuf[1280];
- unsigned short bbuf[1280];
- unsigned short abuf[1280];
-
- oimage = iopen(name,"w",RLE(1),3,xsize,ysize,4);
- if(!oimage) {
- fprintf(stderr,"lbuftoimg: can't open output file\n");
- exit(1);
- }
- for(y=0; y<ysize; y++) {
- cpacktorgba(lbuf,rbuf,gbuf,bbuf,abuf,xsize);
- putrow(oimage,rbuf,y,0);
- putrow(oimage,gbuf,y,1);
- putrow(oimage,bbuf,y,2);
- putrow(oimage,abuf,y,3);
- lbuf += xsize;
- }
- iclose(oimage);
- }
-